B. 列队还原(queue)

    传统题 文件IO:queue 1000ms 256MiB

列队还原(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

模拟赛

未参加
状态
已结束
规则
ACM/ICPC
题目
4
开始于
2026-10-29 12:00
结束于
2026-10-29 16:00
持续时间
4 小时
主持人
参赛人数
12