AT_abc294_d [ABC294D] Bank

题目描述

银行里有编号为 $1, 2, \dots, N$ 的人排队。 接下来会发生 $Q$ 个事件。每个事件属于以下三种之一: - `1`:在尚未被叫号的人中,编号最小的人被叫到前台。 - `2\ x`:编号为 $x$ 的人第一次前往前台。(此时,$x$ 已经被叫号至少一次。) - `3`:在已经被叫号但还未前往前台的人中,编号最小的人再次被叫到前台。 请按被叫到前台的顺序,输出每次第 $3$ 种事件中被叫到前台的人的编号。

输入格式

输入以如下格式从标准输入读入。这里 $\text{event}_i$ 表示第 $i$ 个事件。 > $N\ Q$ > $\text{event}_1$ > $\text{event}_2$ > $\vdots$ > $\text{event}_Q$ 每个事件的输入格式如下三种之一: ``` 1 ``` ``` 2\ x ``` ``` 3 ```

输出格式

设输入中第 $3$ 种事件的总数为 $X$,请输出 $X$ 行。 第 $i$ 行输出第 $i$ 次第 $3$ 种事件中被叫到前台的人的编号。

说明/提示

### 限制条件 - $1 \leq N \leq 5 \times 10^5$ - $2 \leq Q \leq 5 \times 10^5$ - 当所有人都已被叫号时,不会发生第 $1$ 种事件 - 对于第 $2$ 种事件,编号为 $x$ 的人已经被叫号至少一次 - 对于第 $2$ 种事件,编号为 $x$ 的人不会前往前台超过一次 - 当所有被叫号的人都已前往前台时,不会发生第 $3$ 种事件 - 第 $3$ 种事件至少会发生一次 - 输入的所有值均为整数 ### 样例解释 1 对于 $i=1,2,\dots,Q$,在第 $i$ 个事件发生前,已经被叫号但还未前往前台的人的集合如下: - $i=1$:$\lbrace\ \rbrace$ - $i=2$:$\lbrace\ 1\rbrace$ - $i=3$:$\lbrace\ 1,2\rbrace$ - $i=4$:$\lbrace\ 1,2\rbrace$ - $i=5$:$\lbrace\ 2\rbrace$ - $i=6$:$\lbrace\ 2,3\rbrace$ - $i=7$:$\lbrace\ 2\rbrace$ - $i=8$:$\lbrace\ 2\rbrace$ - $i=9$:$\lbrace\ 2,4\rbrace$ - $i=10$:$\lbrace\ 4\rbrace$ 第 $3$ 种事件在 $i=3,7,10$ 时发生,因此此时集合中编号最小的人分别为 $1, 2, 4$,应依次输出。 由 ChatGPT 4.1 翻译