#abc185f. [abc185_f]Range Xor Query

[abc185_f]Range Xor Query

問題文

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

  • Ti=1T_i = 1 のとき
    AXiA_{X_i}AXioplusYiA_{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}$ を出力する

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

ビット単位 xor とは

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

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

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

制約

  • 1leNle3000001 \\le N \\le 300000
  • 1leQle3000001 \\le Q \\le 300000
  • 0leAilt2300 \\le A_i \\lt 2^{30}
  • TiT_i11 または 22
  • Ti=1T_i = 1 なら 1leXileN1 \\le X_i \\le N かつ 0leYilt2300 \\le Y_i \\lt 2^{30}
  • Ti=2T_i = 2 なら 1leXileYileN1 \\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 hspace22ptvdots\\hspace{22pt} \\vdots TQT_Q XQX_Q YQY_Q

出力

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


入力例 1

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

出力例 1

0
1
2

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


入力例 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

出力例 2

1
0
5
3
0