#P14711. [Bulgarian2015]towers

[Bulgarian2015]towers

题目描述

Pesho 用积木搭了 NN 座塔。它们从左到右排成一行,编号为 11NN

ii 座塔的高度是一个正整数 pip_i1piN1 \le p_i \le N),表示它由多少块积木构成。所有塔的高度两两不同。

在欣赏自己的作品时,Pesho 想出了如下定义:

j<ij < i,且 pj<pip_j < p_i,并且在它们之间不存在某个 kk(满足 j<k<ij < k < i)使得 pj<pkp_j < p_k,那么称第 ii 座塔覆盖jj 座塔。

这个定义让他非常满意,于是他开始统计:对每一座塔,分别有多少座别的塔被它覆盖。

他把这些统计结果记成序列 L1,L2,,LNL_1,L_2,\ldots,L_N,其中 LiL_i 表示第 ii 座塔覆盖的塔数。

就在他完成这项工作、正思考下一步研究方向时,他的弟弟出现了,并且毫不客气地把所有塔都毁掉了。Pesho 当然已经记不清各座塔原来的高度,于是陷入了短暂但深刻的创作型抑郁。不过很快他想到,这场意外其实带来了一个新问题:根据记录下来的 L1,L2,,LNL_1,L_2,\ldots,L_N,尝试恢复各座塔的高度。

经过认真思考后,他发现仅凭这个列表无法唯一恢复原始高度(见样例解释),于是把目标改成了更弱的版本:构造一组高度,使得第 ii 座塔恰好覆盖 LiL_i 座其他塔。

同时,他仍要求所有塔的高度两两不同,并且都是 11NN 之间的正整数。

请编写程序 towers 帮助 Pesho 完成这个任务。

输入格式

第一行输入一个整数 NN,表示塔的数量。

接下来 NN 行,每行一个非负整数 LiL_i,表示第 ii 座塔应覆盖的塔数。

输出格式

输出 NN 个正整数 pip_i,表示你构造出的各塔高度,要求第 ii 座塔恰好覆盖 LiL_i 座塔。

每个数单独占一行。

如果有多组解,输出任意一组即可。

说明

请不要忘记:输入中的 LiL_i 来自 Pesho 曾经真实搭出的某组塔,因此至少存在一组解

样例

输入

6
0
1
0
0
0
2

输出

5
6
4
2
1
3

样例解释

第 2 座塔覆盖第 1 座塔;第 3、4、5 座塔不覆盖任何塔;第 6 座塔覆盖第 4 和第 5 座塔。

另一组同样满足条件的解为:

4
6
5
2
1
3

数据范围

  • 10% 的测试点:2N102 \le N \le 10
  • 30% 的测试点:2N152 \le N \le 15
  • 60% 的测试点:2N60002 \le N \le 6000
  • 100% 的测试点:2N10000002 \le N \le 1000000
  • 1piN1 \le p_i \le N,且所有 pip_i 两两不同

评分方式

每个测试点单独计分。