E - Join Wars
問題文
VRChat において、インスタンスとは、ユーザーが集まることができる空間の一つ一つのことです。
$N$ 人のプレイヤーと $M$ 個のインスタンスがあります。各インスタンスには待機列があります。インスタンスには $1,2,\ldots ,M$ と番号が付いています。
インスタンス $i$ の定員は $A _ i$ です。満員のインスタンスに対してプレイヤーが入場を試みたとき、そのプレイヤーは待機列の最後尾に並び、空きができるのを待つことになります。
はじめ、すべてのプレイヤーはどのインスタンスにも入場しておらず、またどの待機列にも並んでいません。$Q$ 個のクエリが与えられるので、順に処理してください。
-
1 x y: インスタンス移動プレイヤー $x$ が現在の居場所を一度離れた後、インスタンス $y$ への入場を試みる。正確には、以下の処理が順に発生する。
-
プレイヤー $x$ があるインスタンスに入場している場合、そのインスタンスからプレイヤー $x$ が退出する。そのインスタンスの待機列にプレイヤーがいる場合、待機列の先頭にいるプレイヤーがインスタンスに入場する。
-
プレイヤー $x$ があるインスタンスの待機列に並んでいる場合、プレイヤー $x$ は待機列から外れる。
-
インスタンス $y$ が満員である場合、プレイヤー $x$ がインスタンス $y$ の待機列の最後尾に並ぶ。
-
インスタンス $y$ が満員でない場合、プレイヤー $x$ がインスタンス $y$ に入場する。
-
-
2 z: 居場所判定- プレイヤー $z$ がインスタンスに入場している場合、そのインスタンスの番号を $p$ として
1 pを出力する。 - プレイヤー $z$ が待機列に並んでいる場合、対応するインスタンスの番号を $p$ として
2 pを出力する。 - 以上のどちらでもない場合、
-1を出力する。
- プレイヤー $z$ がインスタンスに入場している場合、そのインスタンスの番号を $p$ として
なお、入出力が大きくなる場合があるので、高速な方法で入出力を行うことを推奨します。
制約
- $1 \leq N \leq 500{,}000$
- $1 \leq M \leq 500{,}000$
- $1 \leq Q \leq 500{,}000$
- $1 \leq A_i \leq N$
- $1 \leq x \leq N$
- $1 \leq y \leq M$
- $1 \leq z \leq N$
- クエリ $2$ は $1$ つ以上存在する
- 入力はすべて整数
部分点
- $Q \leq 5{,}000$ を満たすデータセットに正解した場合は $50$ 点が与えられる。
入力
入力は以下の形式で標準入力から与えられる。
$N$ $M$ $Q$
$A_1 \ A_2 \ \dots \ A_M$
$\mathrm{Query} _ 1$
$\mathrm{Query} _ 2$
$\vdots$
$\mathrm{Query} _ Q$
出力
クエリ $2$ に対する回答を、与えられる順に $1$ 行に $1$ つずつ出力せよ。
5 5 16
2 2 2 2 2
1 1 1
1 2 1
1 3 1
1 4 1
2 1
2 2
2 3
2 4
2 5
1 1 2
1 5 3
2 1
2 2
2 3
2 4
2 5
1 1
1 1
2 1
2 1
-1
1 2
1 1
1 1
2 1
1 3
- $1$~$4$ 番目のクエリでは、プレイヤー $1$ 、 $2$ 、 $3$ 、 $4$ がこの順にインスタンス $1$ に入ろうとします。インスタンス $1$ の定員は $2$ 人なので、プレイヤー $1$ 、 $2$ はインスタンスの参加し、プレイヤー $3$ 、 $4$ は待機列にこの順に並びます。
- $5$~$9$ 番目のクエリでは、この時点での各プレイヤーの状態を出力しなければなりません。プレイヤー $1$~$4$ の状態は前述のとおりですが、プレイヤー $5$ はどのインスタンスにも参加しておらず、どの待機列にも入っていません。
- $10$ 番目のクエリでは、プレイヤー $1$ がインスタンス $2$ に移動しようとします。プレイヤー $1$ がインスタンス $1$ から離脱することにより、待機列に並んでいたプレイヤー $3$ が新たにインスタンス $1$ に参加します。プレイヤー $1$ はそのままインスタンス $2$ に参加します。
- $11$ 番目のクエリでは、プレイヤー $5$ がインスタンス $3$ に参加しようとし、そのまま参加します。
- $12$~$16$ 番目のクエリでは、この時点での各プレイヤーの状態を出力しなければなりません。