atcoder#ABC265G. [ABC265G] 012 Inversion

[ABC265G] 012 Inversion

题目描述

各要素が 0,1,2 0,1,2 のいずれかである長さ N N の数列 A=(A1,,AN) A=(A_1,\ldots,A_N) が与えられます。
Q Q 個のクエリを順に処理してください。各クエリは以下の 2 2 種類のいずれかです。

  • 1 L R:数列 (AL,,AR) (A_L,\ldots,A_R) の転倒数を出力する
  • 2 L R S T UL i  R L\leq\ i\ \leq\ R を満たす各 i i について、Ai A_i 0 0 なら S S に、1 1 なら T T に、2 2 なら U U に置き換える

転倒数とは? 数列 B = (B1, , BM) B\ =\ (B_1,\ \ldots,\ B_M) の転倒数とは、整数の組 (i, j) (i,\ j) (1  i であって Bi > Bj (1\ \leq\ i\ であって\ B_i\ >\ B_j を満たすものの個数です。

输入格式

入力は以下の形式で標準入力から与えられる。

N N Q Q A1 A_1 A2 A_2 \ldots AN A_N  Query1 \rm\ Query_1  Query2 \rm\ Query_2 \vdots  QueryQ \rm\ Query_Q

ここで i i 番目のクエリを表す  Queryi \rm\ Query_i は以下のいずれかの形式で与えられる。

1 1 L L R R

2 2 L L R R S S T T U U

输出格式

1 1 種類目のクエリに対する答えを順に改行区切りで出力せよ。

题目大意

有一个元素全为 0,10,122 的数列 A=(A1,A2,,An)A = (A_1,A_2,\ldots,A_n)。现在有两种操作:

  1. 1 L R:询问区间 [L,R][L,R] 内的逆序对数量;

  2. 2 L R S T U:将区间 [L,R][L,R] 内的所有 00 改为 SS11 改为 TT22 改为 UU

5 3
2 0 2 1 0
1 2 5
2 2 4 2 1 0
1 2 5
3
4
3 3
0 1 2
1 1 1
2 1 3 0 0 0
1 1 3
0
0

提示

制約

  • 1  N  105 1\ \leq\ N\ \leq\ 10^5
  • 0  Ai  2 0\ \leq\ A_i\ \leq\ 2
  • 1 Q 105 1\leq\ Q\leq\ 10^5
  • 各クエリにおいて、1 L  R  N 1\leq\ L\ \leq\ R\ \leq\ N
  • 2 2 種類目のクエリにおいて、0 S,T,U  2 0\leq\ S,T,U\ \leq\ 2
  • 入力に含まれる値は全て整数である

Sample Explanation 1

最初 A=(2,0,2,1,0) A=(2,0,2,1,0) です。 - 1 1 番目のクエリにおいて、(A2,A3,A4,A5)=(0,2,1,0) (A_2,A_3,A_4,A_5)=(0,2,1,0) の転倒数 3 3 を出力します。 - 2 2 番目のクエリを処理すると、A=(2,2,0,1,0) A=(2,2,0,1,0) となります。 - 3 3 番目のクエリにおいて、(A2,A3,A4,A5)=(2,0,1,0) (A_2,A_3,A_4,A_5)=(2,0,1,0) の転倒数 4 4 を出力します。