编程题
### **问题描述** 在一次探险中,勇者小蓝发现了 $n$ 颗闪烁着奇异光芒的宝石,每颗宝石都蕴含着魔法能量,分别记作 $a_1, a_2, \dots, a_n$。小蓝计划用 $n$ 个特制的魔法盒子来封印这些宝石,防止其魔法能量被滥用。 封印宝石会消耗小蓝的体力,具体地,将第 $i$ 颗宝石放入第 $j$ 个盒子会消耗小蓝 $i - j$ 点体力(注:需满足 $j\leq i$ 才能将第 $i$ 颗宝石放入第 $j$ 个盒子进行有效的封印)。小蓝也可以选择将魔法盒留空,以保存体力供后续使用。 此外,为了避免魔力相冲,每个盒子只能存放一颗宝石(每个宝石也只能放进一个盒子),且任意两个相邻盒子不能存放魔力值相同的宝石。 小蓝初始的体力值为 $k$。在不超出体力限制的条件下,小蓝希望找出一种宝石的放置方法,使得宝石的魔力值在这 $n$ 个盒子中的排列顺序具有最大的字典序(注:未放置宝石的盒子在此序列中记为 $-1$)。 作为勇者小蓝的追随者,请你帮他找出这一放置宝石的方法。 **字典序的解释:** 在本题中,字典序的大小是按照宝石的魔力值进行比较的。对于两个长度相同的魔力值序列 $a$ 和 $b$,如果存在一个位置 $i$,使得 $a_j = b_j$ 对所有 $1 \leq j < i$ 成立,但是 $a_i < b_i$,则序列 $a$ 在字典序上小于序列 $b$。反之,如果 $a_i > b_i$,则序列 $a$ 在字典序上大于序列 $b$。如果不存在这样的 $i$,则序列 $a$ 和序列 $b$ 的字典序相等。 ### **输入格式** 第一行包含两个整数 $n$ 和 $k$,分别表示宝石的数量和小蓝的初始体力值。 第二行包含 $n$ 个由空格分隔的整数 $a_1, a_2, \dots, a_n$,分别表示每颗宝石的魔法能量值。 ### **输出格式** 输出一个包含 $n$ 个整数的序列,代表每个魔法盒中宝石的魔法能量值。如果某个魔法盒为空,则对应位置输出 `-1`。 ### **样例输入** ```text 3 3 1 3 2 ``` ### **样例输出** ```text 3 2 -1 ``` ### **样例说明** 在开始放置宝石之前,体力为 $3$,宝石在盒子中的排列为 $[-1, -1, -1]$。 1. 将第 $2$ 个宝石放进第 $1$ 个盒子,得到 $[3, -1,-1]$,体力剩余 $2$。 2. 将第 $3$ 个宝石放进第 $2$ 个盒子,得到 $[3,2,-1]$,体力剩余 $1$。 此时,已经没有体力将第 $1$ 个宝石放进第 $3$ 个盒子,因此最后宝石在盒子中的排列为 $[3, 2, -1]$。显然,没有比这更优的放置方法。 ### **【评测用例规模与约定】** 对于 $20\\%$ 的评测用例,$1 \leq N \leq 5\times 10^3$,$0\leq K \leq 3\times 10^6$,$1\leq a_i \leq 10^5$。 对于所有评测用例,$1\leq N \leq 10^5$,$0\leq K \leq 10^9$, $1\leq a_i \leq 10^9$。
查看答案
赣ICP备20007335号-2