AT_aalc001_d 転倒数
Description
$ 0,1,2 $ からなる長さ $ N $ の数列 $ A=(A_1,A_2,\ldots,A_N) $ が与えられます。
クエリを $ Q $ 個処理してください。クエリは以下の $ 2 $ 種類のいずれかです。
- `1 i x`: $ A_i $ を $ x $ に変更する。
- `2 l r`:数列 $ (A_l,A_{l+1},\ldots,A_r) $ の転倒数を出力する。
ここで、長さ $ k $ の数列 $ B=(B_1,B_2,\ldots,B_k) $ の **転倒数** とは、 $ 1 \leq i \lt j \leq k $ かつ $ B_i \gt B_j $ を満たす整数の組 $ (i,j) $ の個数です。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ N $ $ Q $ $ A_1 $ $ A_2 $ $ \ldots $ $ A_N $ $ \mathrm{query}_1 $ $ \mathrm{query}_2 $ $ \vdots $ $ \mathrm{query}_Q $
各クエリは以下のいずれかの形式で与えられる。
> $ 1 $ $ i $ $ x $
> $ 2 $ $ l $ $ r $
Output Format
$ 2 $ 種類目のクエリの個数を $ q $ として、 $ q $ 行出力せよ。 $ j $ 行目には、 $ j $ 番目の $ 2 $ 種類目のクエリに対する答えを出力せよ。
Explanation/Hint
### Sample Explanation 1
はじめ、 $ A=(2,0,1,2,0) $ です。
$ 3 $ 番目のクエリを処理した後、 $ A=(2,2,1,2,0) $ となります。
### Constraints
- $ 1 \leq N \leq 2 \times 10^5 $
- $ 1 \leq Q \leq 2 \times 10^5 $
- $ 0 \leq A_i \leq 2 $
- $ 1 $ 種類目のクエリについて、 $ 1 \leq i \leq N $ , $ 0 \leq x \leq 2 $
- $ 2 $ 種類目のクエリについて、 $ 1 \leq l \leq r \leq N $
- 入力される数値はすべて整数