[R77D]归并 - 代码源竞赛平台

时空限制

1.5S/512M

题目描述

一条从左到右排列的流水线上有 nn 个物料盒,原编号依次为 1,2,…,n1,2,\ldots,n。第 ii 个盒子最初装有 aia_i 单位物料。移走盒子后,其他盒子仍保留原编号。

管理员反复执行以下操作,直到所有盒子都被移走:

  1. 选出当前物料量最少的盒子;如果有多个,选择原编号最小的一个。设它的原编号为 ii,当前物料量为 vv。
  2. 如果它的右侧还有未移走的盒子,将这 vv 单位物料倒入右侧最近的未移走盒子。这里“右侧最近”指原编号大于 ii 的未移走盒子中,原编号最小者。如果不存在这样的盒子,则直接取走这些物料,不向任何盒子增加物料。
  3. 移走原编号为 ii 的盒子,并记录 ii。

下一轮根据更新后的物料量重新选择盒子。请输出记录下来的原编号序列。

格式

输入格式

第一行包含一个正整数 nn,为盒子的数量。

第二行包含 nn 个非负整数 a1,a2,…,ana_1,a_2,\ldots,a_n,其中 aia_i 为原编号为 ii 的盒子最初装有的物料量。

输出格式

输出一行,包含 nn 个正整数,依次表示每轮移走的盒子的原编号,相邻两个整数之间用一个空格分隔。

样例

样例输入 #1

4
4 1 3 2

样例输出 #1

2 4 1 3

样例解释 #1

先移走盒子 22,将盒子 33 的物料量变为 44;接着移走最右侧的盒子 44,不向任何位置增加物料。剩下盒子 11、33 的物料量都为 44,先移走盒子 11,最后移走盒子 33。

样例输入 #2

4
1 2 1 2

样例输出 #2

1 3 2 4

样例解释 #2

前两轮分别移走盒子 11、33,之后盒子 22、44 的物料量都为 33。移走盒子 22 时,它右侧最近的未移走盒子是盒子 44,因此盒子 44 的物料量变为 66。

数据规模

注意:你只有通过了子任务的所有测试点,才能获得对应子任务的分数。

子任务编号 分数 n≤n\le 特殊性质
11 2525 20002000 无
22 2525 2×1052\times10^5 A
33 5050 无特殊限制

特殊性质 A:对于所有 1≤i≤n1\le i\le n,均有 ai∈{0,1}a_i\in\{0,1\}。

对于 100%100\% 的数据,满足 1≤n≤2×1051\le n\le2\times10^5,0≤ai≤1090\le a_i\le10^9,输入中的所有数均为整数。