QOJ.ac

QOJ

時間限制: 2.5 s 記憶體限制: 512 MB 總分: 100

#11695. 午餐队列

统计

午餐时间到了!这就是为什么 $n$ 名员工来到食堂吃午餐。已知第 $i$ 名员工属于团队 $c_i$,且具有傲慢值 $a_i$。

假设队列中当前有 $l$ 个人。队列中的位置从队列开头起编号为 $1$ 到 $l$。当一个人来到食堂时,他会尝试通过站在他的一名队友旁边,尽可能靠近队列的开头。形式化地说,如果一名新来者进入队列的位置为 $k$ ($1 \le k \le l + 1$),他会将第 $k$ 个人及之后的所有人向后移动一个位置,并占据位置 $k$。特别地,$k = 1$ 对应队列的开头,$k = l + 1$ 对应队列的末尾。

员工 $i$ 仅在满足以下两个条件时才能停留在位置 $k$:

  • 到达位置 $k$ 后,新来者的邻居中至少有一人来自同一个团队 $c_i$;
  • 新来者因其傲慢程度而移动的人数不能过多,即:$k \ge l + 1 - a_i$。

在所有满足上述条件的 $k$ 中,选择最小的一个。如果没有合适的 $k$ 值,新来者将直接排在队列中最后一个人的后面。

例如,如果队列中有五个人,分别属于团队 1、3、4、1、3(从队列开头算起),而新来者属于团队 1,傲慢值为 3,他会停留在队列的第 4 个位置。此后,员工团队序列变为 1, 3, 4, 1, 1, 3。注意,傲慢值 3 本来也允许他到达第 3 个位置,但在那种情况下,他旁边没有队友,因此第一个条件被违反了。

已知员工到达的顺序以及他们的 $c_i$ 和 $a_i$ 值,请找出最后队列的样子。

输入格式

第一行包含一个整数 $n$ ($1 \le n \le 400\,000$),表示员工人数。 接下来的 $n$ 行,每行包含两个整数 $c_i, a_i$ ($1 \le c_i \le n, 0 \le a_i \le 400\,000$),分别表示第 $i$ 名员工的团队和傲慢值。

输出格式

输出 $n$ 个从 $1$ 到 $n$ 的不同整数,表示所有员工到达食堂后,从队列开头到末尾的员工编号。员工按其在输入数据中出现的顺序从 $1$ 到 $n$ 进行编号。

样例

输入 1

8
1 0
2 1
2 2
1 1
3 2
1 3
2 3
2 5

输出 1

1 3 8 2 7 6 4 5

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.