atcoder#ABC294D. [ABC294D] Bank

[ABC294D] Bank

配点 : 400400

問題文

銀行に人 11, 人 22, \dots, 人 NN が並んでいます。 QQ 個のイベントが発生します。イベントは次の 33 種類のいずれかです。

  • 1 : 受付に呼ばれていない人のうち、最も小さい番号の人が受付に呼ばれる。
  • 2 x : 人 xx が初めて受付に行く。(ここで、人 xx はすでに 1 回以上受付に呼ばれている。)
  • 3 : すでに受付に呼ばれているが受付に行っていない人のうち、最も小さい番号の人が再度呼ばれる。

33 種類目のイベントで受付に呼ばれる人の番号を呼ばれた順に出力してください。

制約

  • 1N5×1051 \leq N \leq 5 \times 10^5
  • 2Q5×1052 \leq Q \leq 5 \times 10^5
  • 全ての人が 1 回以上呼ばれているときに 11 種類目のイベントが発生することはない
  • 22 種類目のイベントについて、人 xx はすでに 1 回以上受付に呼ばれている
  • 22 種類目のイベントについて、人 xx が 2 回以上受付に行くことはない
  • 呼ばれている人が全員すでに受付に行っているときに 33 種類目のイベントが発生することはない
  • 33 種類目のイベントは少なくとも 1 回発生する
  • 入力される値はすべて整数

入力

入力は以下の形式で標準入力から与えられる。ここで eventi\text{event}_iii 番目のイベントを意味する。

NN QQ

event1\text{event}_1

event2\text{event}_2

\vdots

eventQ\text{event}_Q

イベントは次の 3 つのいずれかの形式で入力される。

1

2 xx

3

出力

入力で与えられる 33 種類目のイベントの個数を XX として、XX 行出力せよ。 ii 行目には、33 種類目のイベントのうち ii 番目のもので呼ばれた人の番号を出力せよ。

4 10
1
1
3
2 1
1
2 3
3
1
2 2
3
1
2
4

i=1,2,,Qi = 1, 2, \dots, Q について、ii 番目のイベントが起こる前の時点での、受付に呼ばれたが受付に行っていない人の集合を列挙すると次のようになります。

  • i=1i=1 : {}\lbrace \rbrace
  • i=2i=2 : {1}\lbrace 1\rbrace
  • i=3i=3 : {1,2}\lbrace 1,2\rbrace
  • i=4i=4 : {1,2}\lbrace 1,2\rbrace
  • i=5i=5 : {2}\lbrace 2\rbrace
  • i=6i=6 : {2,3}\lbrace 2,3\rbrace
  • i=7i=7 : {2}\lbrace 2\rbrace
  • i=8i=8 : {2}\lbrace 2\rbrace
  • i=9i=9 : {2,4}\lbrace 2,4\rbrace
  • i=10i=10 : {4}\lbrace 4\rbrace

33 種類目のイベントは i=3,7,10i=3,7,10 のときに発生しているので、その時点での集合のうち番号が最小の人である 1,2,41, 2, 4 を出力します。