#P10711. [NOISG2024 Prelim] Amusement Park

[NOISG2024 Prelim] Amusement Park

题目背景

翻译自 NOI SG 2024 Prelim D.Amusement Park

题目描述

有一家游乐园,在大门处有一项观光车服务。很显然,一辆观光车只能承载有限的人数,那么如果一个团队来到大门时,发现观光车不够坐时,他们需要决定是否愿意分开。有些团队愿意,有些不愿意。

为了解决这个复杂的问题,公园的管理者蜗牛 Stuart 想请你帮忙写一个程序,支持以下三种操作:

  • join:一个新的团队进入了队列。我们用两个整数 s,ws,w 描述此次操作:ss 表示该团队的总人数;如果 w=1w=1,那么这个团队愿意在乘坐观光车时分开;如果 w=0w=0,表示他们不愿意分开。假设这次操作是所有操作中第 iijoin 操作,则该团队的编号为 ii

  • leave:给定 ii,编号为 ii 的团队从队伍中离开。

  • board:给定 bb,表示新开来一辆能坐 bb 人的观光车。从队头开始,如果到一个团队时,观光车可以承载所有人,那么所有人上车;否则如果该团队愿意分开,那么部分人上车;否则该团队留在原位置,在下一个团队重复该过程,直到观光车坐满,或没有人愿意上车。

输入格式

第一行,一个整数 qq

接下来 qq 行,每行一次操作,分为以下三种:

  • 1 s w:描述一次 join 操作;

  • 2 i:描述一次 leave 操作;

  • 3 b:描述一次 board 操作。

输出格式

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

对于每一次 board 操作,设有 kk 个团队有至少一个人上了观光车,你需要输出 k+1k+1 行:

  • 第一行一个整数 kk

  • 接下来 kk 行,每行两个整数,第一个表示团队编号,第二个表示该团队上观光车的人数。注意:团队编号应从小到大输出。(如果 k=0k=0,忽略此部分。)

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

4
1 19 1
3 10
3 10
3 10

1
1 10
1
1 9
0

提示

【数据范围】

Subtask\text{Subtask} 分值 特殊性质
00 样例
11 1212 q1000q\le1000
22 77 s=1,w=0s=1,w=0,没有 leave 操作
33 2020 s10,w=0s\le10,w=0,没有 leave 操作
44 1616 s10s\le10,没有 leave 操作
55 1010 s10s\le10
66 3535 无特殊性质

对于 100%100\% 的数据:

  • 1q2000001 \le q \le 200000

  • 对于所有 join 操作,1s200000,0w11 \le s \le 200000,0 \le w \le 1

  • 对于所有 leave 操作,保证所有 ii 在操作时都在队列中。

  • 对于所有 board 操作,1b10121 \le b \le 10^{12}

  • 至少有一次 board 操作。