QOJ.ac

QOJ

حد الوقت: 1 s حد الذاكرة: 1024 MB مجموع النقاط: 100

#8588. 游乐园

الإحصائيات

人们通常会成群结队地去游乐园。但是,当轮到他们乘坐游乐设施时,如果发现座位不足以容纳所有人,会发生什么呢?有些团体愿意拆分,而有些则不愿意。

Stuart 蜗牛负责管理热门游乐设施前的排队队列。团体按顺序排队等待乘坐。在登乘期间,Stuart 首先会收到可以容纳的座位总数。然后,他从队首开始,依次询问队列中的每个团体。他会告诉该团体剩余的座位数,并询问他们是否愿意登乘。团体根据以下规则做出决定:

  • 如果剩余座位足够容纳整个团体,该团体将一起登乘。
  • 否则,如果该团体愿意拆分,他们会派出足够的人数填满剩余的座位,而其余成员则留在队列中的原位。
  • 否则,整个团体将一起留在队列中的原位。

在此过程中,最终可能并非所有可用座位都被填满。无论如何,成功登乘的人们将享受游乐设施,并在结束后离开,不会重新加入队列。

不幸的是,对于像 Stuart 这样的蜗牛来说,这个过程非常耗时,因为它需要反复沿着队列移动。请编写一个程序来跟踪队列的状态,并快速确定哪些团体应该在必要时拆分并登乘。具体来说,它应该支持以下三种操作:

  • join:一个团体加入队列末尾。
    • 给定一个整数 $s$,表示团体的大小。
    • 给定一个整数 $w$,其值为 $0$ 或 $1$。如果 $w = 0$,则该团体不愿意拆分。否则,如果 $w = 1$,则该团体愿意拆分。你可以假设一个团体的拆分意愿永远不会改变。
    • 假设这是第 $i$ 次 join 操作,则该团体被分配 ID $i$,其中 $i$ 从 $1$ 开始计数。
  • leave:一个团体在不登乘的情况下离开队列。
    • 给定一个整数 $i$,表示离开队列的团体 ID。
    • 保证该团体在队列中。如果该团体愿意拆分,则其部分成员可能已经登乘并离开了。
  • board:允许一些人根据规则登乘。
    • 给定一个整数 $b$,表示在此期间最多可以登乘的人数。
    • 你需要决定每个团体有多少人登乘。有关更多信息,请参阅“输出格式”部分。

输入格式

你的程序必须从标准输入读取数据。

注意,输入中的某些值可能无法用 32 位整数表示。

输入的第一行包含一个整数 $q$,表示 joinleaveboard 操作的总数。

接下来的 $q$ 行,每行包含两个或三个整数,遵循以下三种格式之一:

  • 1 s w:描述一个 join 操作;
  • 2 i:描述一个 leave 操作;
  • 3 b:描述一个 board 操作。

输出格式

你的程序必须输出到标准输出。

对于 joinleave 操作,不要输出任何内容。

对于每次 board 操作,令 $k$ 为至少有一人登乘的团体数量。你应该输出 $k + 1$ 行,具体如下:

  • 第一行应仅包含整数 $k$。
  • 如果 $k > 0$,则接下来的 $k$ 行,每行应包含两个整数。第一个是团体 ID,第二个是该团体中登乘的人数。你应该按团体 ID 递增的顺序输出这 $k$ 行。(如果 $k = 0$,你可以忽略此部分。)

数据范围

对于所有测试用例,输入满足以下限制:

  • $1 \le q \le 200\,000$
  • 对于所有 join 操作,$1 \le s \le 200\,000$ 且 $0 \le w \le 1$
  • 对于所有 leave 操作,ID 为 $i$ 的团体在操作时一定在队列中
  • 对于所有 board 操作,$1 \le b \le 10^{12}$
  • 至少有一次 board 操作

你的程序将在满足以下限制的输入实例上进行测试:

子任务 分值 附加限制
0 0 样例测试
1 12 $q \le 1000$
2 7 $s = 1, w = 0$,没有 leave 操作
3 20 $s \le 10, w = 0$,没有 leave 操作
4 16 $s \le 10$,没有 leave 操作
5 10 $s \le 10$
6 35 无附加限制

样例

样例输入 1

7
1 2 0
1 6 0
1 6 1
3 5
2 2
1 3 0
3 123456789012

样例输出 1

2
1 2
3 3
2
3 3
4 3

样例输入 2

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

样例输出 2

2
1 1
2 1

样例输入 3

4
1 19 1
3 10
3 10
3 10

样例输出 3

1
1 10
1
1 9
0

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.