AT_abc428_f [ABC428F] Pyramid Alignment
Description
数直線上に $ N $ 個の区間があり、 $ 1 $ から $ N $ までの番号が付けられています。
区間 $ i $ の左端の座標は $ 0 $ 、右端の座標は $ W_i $ です。ここで、 $ W_1 < W_2 < \dots < W_N $ です。
$ Q $ 個のクエリが与えられるので、与えられた順に処理してください。クエリは次の $ 3 $ 種類のいずれかです。
- タイプ $ 1 $ (`1 v`): 現在の区間 $ v $ の**左端**の座標を $ l $ とする。番号が $ v $ 以下であるすべての区間をそれぞれ、**左端**の座標が $ l $ となるように平行移動する。
- タイプ $ 2 $ (`2 v`): 現在の区間 $ v $ の**右端**の座標を $ r $ とする。番号が $ v $ 以下であるすべての区間をそれぞれ、**右端**の座標が $ r $ となるように平行移動する。
- タイプ $ 3 $ (`3 x`): 座標 $ x+\frac{1}{2} $ を含む区間の現在の個数を出力する。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ N $ $ W_1 $ $ \dots $ $ W_N $ $ Q $ $ \textrm{query}_1 $ $ \textrm{query}_2 $ $ \vdots $ $ \textrm{query}_Q $
$ \textrm{query}_j $ は $ j $ 番目のクエリを表す。各クエリは以下のいずれかの形式で与えられる。
> $ 1 $ $ v $
> $ 2 $ $ v $
> $ 3 $ $ x $
Output Format
タイプ $ 3 $ のクエリの回数を $ q $ として、 $ q $ 行出力せよ。 $ j $ 行目 ( $ 1 \leq j \leq q $ ) には $ j $ 番目のタイプ $ 3 $ のクエリに対する答えを出力せよ。
Explanation/Hint
### Sample Explanation 1
はじめ、各区間は番号順に $ [0, 2], [0, 4], [0, 6], [0, 10] $ です。
- $ 1 $ 番目のクエリにおいて、操作前の区間 $ 3 $ の**右端**の座標は $ 6 $ なので、操作後の各区間は番号順に $ [4, 6], [2, 6], [0, 6], [0, 10] $ になります。
- $ 2 $ 番目のクエリにおいて、操作前の区間 $ 2 $ の**左端**の座標は $ 2 $ なので、操作後の各区間は番号順に $ [2, 4], [2, 6], [0, 6], [0, 10] $ になります。
- $ 3 $ 番目のクエリにおいて、座標 $ 2 + \frac{1}{2} $ を含む区間は区間 $ 1,2,3,4 $ の $ 4 $ 個なので、 $ 4 $ を出力します。
- $ 4 $ 番目のクエリにおいて、操作前の区間 $ 4 $ の**右端**の座標は $ 10 $ なので、操作後の各区間は番号順に $ [8, 10], [6, 10], [4, 10], [0, 10] $ になります。
- $ 5 $ 番目のクエリにおいて、座標 $ 1 + \frac{1}{2} $ を含む区間は区間 $ 4 $ のみの $ 1 $ 個なので、 $ 1 $ を出力します。
### Constraints
- $ 1 \leq N \leq 2 \times 10^5 $
- $ 1 \leq Q \leq 2 \times 10^5 $
- $ 1 \leq W_i \leq 10^9 $ ( $ 1 \leq i \leq N $ )
- $ W_1 < W_2 < \dots < W_N $
- タイプ $ 1,2 $ のクエリで与えられる $ v $ について、 $ 1 \leq v \leq N $
- タイプ $ 3 $ のクエリで与えられる $ x $ について、 $ 0 \leq x \leq 10^9 $
- タイプ $ 3 $ のクエリは少なくとも $ 1 $ つ与えられる
- 入力される値はすべて整数