atcoder#ABC185F. [ABC185F] Range Xor Query

[ABC185F] Range Xor Query

配点 : 600600

問題文

長さ NN の整数列 AA があります。 あなたは今からこの数列について QQ 個のクエリを処理します。ii 番目のクエリでは、 Ti,Xi,YiT_i, X_i, Y_i が与えられるので、以下の処理をしてください。

  • Ti=1T_i = 1 のとき AXiA_{X_i}AXiYiA_{X_i} \oplus Y_i で置き換える
  • Ti=2T_i = 2 のとき $A_{X_i} \oplus A_{X_i + 1} \oplus A_{X_i + 2} \oplus \dots \oplus A_{Y_i}$ を出力する

ただし aba \oplus baabb のビット単位 xor を表します。

ビット単位 xor とは

整数 A,BA, B のビット単位 xor 、ABA \oplus B は、以下のように定義されます。

  • ABA \oplus B を二進表記した際の 2k2^k (k0k \geq 0) の位の数は、A,BA, B を二進表記した際の 2k2^k の位の数のうち一方のみが 11 であれば 11、そうでなければ 00 である。

例えば、35=63 \oplus 5 = 6 となります (二進表記すると: 011101=110011 \oplus 101 = 110)。

制約

  • 1N3000001 \le N \le 300000
  • 1Q3000001 \le Q \le 300000
  • 0Ai<2300 \le A_i \lt 2^{30}
  • TiT_i11 または 22
  • Ti=1T_i = 1 なら 1XiN1 \le X_i \le N かつ 0Yi<2300 \le Y_i \lt 2^{30}
  • Ti=2T_i = 2 なら 1XiYiN1 \le X_i \le Y_i \le N
  • 入力は全て整数

入力

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

NN QQ

$A_1 \hspace{7pt} A_2 \hspace{7pt} A_3 \hspace{5pt} \dots \hspace{5pt} A_N$

T1T_1 X1X_1 Y1Y_1

T2T_2 X2X_2 Y2Y_2

T3T_3 X3X_3 Y3Y_3

\hspace{22pt} \vdots

TQT_Q XQX_Q YQY_Q

出力

Ti=2T_i = 2 であるような各クエリについて、答えを 11 行に 11 つずつ、順に出力せよ。

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

11 個目のクエリでは 123=01 \oplus 2 \oplus 3 = 0 を出力します。 22 個目のクエリでは 23=12 \oplus 3 = 1 を出力します。 33 個目のクエリでは A2A_223=12 \oplus 3 = 1 で置き換えられます。 44 個目のクエリでは 13=21 \oplus 3 = 2 を出力します。

10 10
0 5 3 4 7 0 0 0 1 0
1 10 7
2 8 9
2 3 6
2 1 6
2 1 10
1 9 4
1 6 1
1 6 3
1 1 7
2 3 5
1
0
5
3
0