列队还原(queue)
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
题目描述
小 T 正在为学校的仪仗队重新排队。排队时,n 名队员依次入队(入队顺序即为 1, 2, ..., n),每名队员入队时,小 T 会记下一个数:当时在他左侧的队员人数。
现在小 T 只留下了这 n 个记录 A[1], A[2], ..., A[n](A[i] 表示第 i 个入队的队员入队时左侧的人数),队列的最终样子已经丢失。请你根据这 n 个记录还原出最终的队列,输出从左到右每名队员的编号。
如果记录不合法(即某名队员入队时,他左侧的人数超出了当时队列中已有的人数),请输出 -1。
输入格式
从文件 queue.in 中读入数据。
第一行包含一个正整数 n,表示队员的人数。
第二行包含 n 个非负整数 A[1], A[2], ..., A[n],相邻两个整数之间以一个空格分隔,按入队顺序依次表示每名队员入队时左侧的队员人数。
输出格式
输出到文件 queue.out 中。
如果记录不合法,输出一行包含一个整数 -1;否则输出一行 n 个整数 B[1], B[2], ..., B[n],表示还原出的最终队列从左到右各位置上的队员编号,相邻两个整数之间以一个空格分隔。
4
0 1 0 2
3 1 4 2
解释
- 第 1 个队员入队时左侧 0 人,队列为
(1); - 第 2 个队员入队时左侧 1 人,排到队尾,队列为
(1, 2); - 第 3 个队员入队时左侧 0 人,排到队首,队列为
(3, 1, 2); - 第 4 个队员入队时左侧 2 人,排在第 3、1 号队员之后,队列为
(3, 1, 4, 2)。
逐个检查:1 号入队时左侧 0 人(A[1] = 0),2 号入队时左侧 1 人(A[2] = 1),3 号入队时左侧 0 人(A[3] = 0),4 号入队时左侧 2 人(A[4] = 2),均与记录一致。
3
0 5 1
-1
解释
第 2 个队员入队时队列中只有 1 名队员,他左侧最多只有 1 人,而记录为 5,因此记录不合法。
1
0
1
样例 4、样例 5
见选手目录下的 queue/queue4.in 与 queue/queue4.ans,该样例满足 n ≤ 50 的限制。
见选手目录下的 queue/queue5.in 与 queue/queue5.ans,该样例满足 n ≤ 500 的限制。
数据范围
对于所有测试数据,保证:1 ≤ n ≤ 5000,0 ≤ A[i] ≤ 10^9。
| 测试点 | n |
特殊性质 |
|---|---|---|
| 1 ~ 4 | ≤ 50 | 无特殊性质 |
| 5 ~ 7 | ≤ 500 | |
| 8 ~ 10 | ≤ 5000 |