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` 操作。