P10711 [NOISG 2024 Prelim] Amusement Park
题目背景
翻译自 [NOI SG 2024 Prelim D.Amusement Park](https://github.com/noisg/noi-2024-prelim)。
题目描述
有一家游乐园,在大门处有一项观光车服务。很显然,一辆观光车只能承载有限的人数,那么如果一个团队来到大门时,发现观光车不够坐时,他们需要决定是否愿意分开。有些团队愿意,有些不愿意。
为了解决这个复杂的问题,公园的管理者蜗牛 Stuart 想请你帮忙写一个程序,支持以下三种操作:
- `join`:一个新的团队进入了队列。我们用两个整数 $s,w$ 描述此次操作:$s$ 表示该团队的总人数;如果 $w=1$,那么这个团队愿意在乘坐观光车时分开;如果 $w=0$,表示他们不愿意分开。假设这次操作是所有操作中第 $i$ 次 `join` 操作,则该团队的编号为 $i$。
- `leave`:给定 $i$,编号为 $i$ 的团队从队伍中离开。
- `board`:给定 $b$,表示新开来一辆能坐 $b$ 人的观光车。从队头开始,如果到一个团队时,观光车可以承载所有人,那么所有人上车;否则如果该团队愿意分开,那么部分人上车;否则该团队留在原位置,在下一个团队重复该过程,直到观光车坐满,或没有人愿意上车。
输入格式
第一行,一个整数 $q$;
接下来 $q$ 行,每行一次操作,分为以下三种:
- `1 s w`:描述一次 `join` 操作;
- `2 i`:描述一次 `leave` 操作;
- `3 b`:描述一次 `board` 操作。
输出格式
对于 `join` 和 `leave` 操作,你不需要输出任何内容。
对于每一次 `board` 操作,设有 $k$ 个团队有至少一个人上了观光车,你需要输出 $k+1$ 行:
- 第一行一个整数 $k$。
- 接下来 $k$ 行,每行两个整数,第一个表示团队编号,第二个表示该团队上观光车的人数。**注意:团队编号应从小到大输出。**(如果 $k=0$,忽略此部分。)
说明/提示
### 【数据范围】
|$\text{Subtask}$|分值|特殊性质|
|:-:|:-:|:-:|
|$0$|$0$|样例|
|$1$|$12$|$q\le1000$|
|$2$|$7$|$s=1,w=0$,没有 `leave` 操作|
|$3$|$20$|$s\le10,w=0$,没有 `leave` 操作|
|$4$|$16$|$s\le10$,没有 `leave` 操作|
|$5$|$10$|$s\le10$|
|$6$|$35$|无特殊性质|
对于 $100\%$ 的数据:
- $1 \le q \le 200000$
- 对于所有 `join` 操作,$1 \le s \le 200000,0 \le w \le 1$。
- 对于所有 `leave` 操作,保证所有 $i$ 在操作时都在队列中。
- 对于所有 `board` 操作,$1 \le b \le 10^{12}$。
- 至少有一次 `board` 操作。