AT_pakencamp_2022_day1_h Attack Survival
Description
hiikunZ 君はクイズ大会の主催者ですが、得点の管理が苦手です。そこで、あなたが「アタックサバイバル」というルールにおいて得点の管理を行うプログラムを書いてあげることにしました。以下の問題を解くプログラムを書いてください。
クイズ大会に $ N $ 人の参加者が参加していて、 $ 1 $ から $ N $ までの番号がつけられています。各参加者は「体力」というパラメータを持っています。はじめ、参加者 $ i $ の体力は $ A_i $ です。そして $ Q $ 回、以下の $ 2 $ 種類のイベントが発生します。
- `1 x y` : 参加者 $ x $ が配点 $ y $ の問題に正解する。すると、参加者 $ x $ 以外の体力が $ 0 $ より大きいすべての参加者の体力が $ y $ 減る。
- `2 x y` : 参加者 $ x $ が配点 $ y $ の問題に誤答する。すると、参加者 $ x $ の体力が $ y $ 減る。
各イベントごとに、イベントの前には体力が $ 0 $ より大きかったが、イベントの後には体力が $ 0 $ 以下になった参加者の番号を**昇順に**列挙してください。
Input Format
入力は以下の形式で標準入力から与えられます。ここで $ event_i $ は $ i $ 番目のイベントを意味します。
> $ N $ $ Q $ $ A_1 $ $ A_2 $ $ \cdots $ $ A_N $ $ event_1 $ $ event_2 $ $ \vdots $ $ event_Q $
イベントは以下のどちらかの形式で与えられます。
> 1 $ x $ $ y $
> 2 $ x $ $ y $
Output Format
$ Q $ 行にわたって出力してください。
$ i $ 行目には、 $ i $ 番目のイベントの前には体力が $ 0 $ より大きかったが、その後に体力が $ 0 $ 以下になった参加者の人数とその番号を**昇順に**空白区切りで出力してください。
Explanation/Hint
### Sample Explanation 1
最初、各参加者の体力は $ (5,5,5,10) $ です。
$ 1 $ 回目のイベントのあと、各参加者の体力は $ (0,5,0,5) $ になります。
$ 1 $ 回目のイベントの前には体力が $ 0 $ より大きかったが、その後に体力が $ 0 $ 以下になった参加者は 参加者 $ 1 $ と 参加者 $ 3 $ の $ 2 $ 人です。
$ 2 $ 回目のイベントのあと、各参加者の体力は $ (0,5,0,0) $ になります。
$ 2 $ 回目のイベントの前には体力が $ 0 $ より大きかったが、その後に体力が $ 0 $ 以下になった参加者は 参加者 $ 4 $ の $ 1 $ 人です。
### Constraints
- $ 1 \leq N,Q \leq 200000 $
- $ 1 \leq A_i \leq 10^9 $
- $ 1 \leq x \leq N $
- $ 1 \leq y \leq 10^9 $
- 各イベントの発生前、参加者 $ x $ は体力が $ 0 $ より大きい
- 入力はすべて整数