配点 : 600 点
問題文
長さ N の整数列 A があります。
あなたは今からこの数列について Q 個のクエリを処理します。i 番目のクエリでは、 Ti,Xi,Yi が与えられるので、以下の処理をしてください。
- Ti=1 のとき
AXi を AXi⊕Yi で置き換える
- Ti=2 のとき
$A_{X_i} \oplus A_{X_i + 1} \oplus A_{X_i + 2} \oplus \dots \oplus A_{Y_i}$ を出力する
ただし a⊕b は a と b のビット単位 xor を表します。
ビット単位 xor とは
整数 A,B のビット単位 xor 、A⊕B は、以下のように定義されます。
- A⊕B を二進表記した際の 2k (k≥0) の位の数は、A,B を二進表記した際の 2k の位の数のうち一方のみが 1 であれば 1、そうでなければ 0 である。
例えば、3⊕5=6 となります (二進表記すると: 011⊕101=110)。
制約
- 1≤N≤300000
- 1≤Q≤300000
- 0≤Ai<230
- Ti は 1 または 2
- Ti=1 なら 1≤Xi≤N かつ 0≤Yi<230
- Ti=2 なら 1≤Xi≤Yi≤N
- 入力は全て整数
入力
入力は以下の形式で標準入力から与えられる。
N Q
$A_1 \hspace{7pt} A_2 \hspace{7pt} A_3 \hspace{5pt} \dots \hspace{5pt} A_N$
T1 X1 Y1
T2 X2 Y2
T3 X3 Y3
⋮
TQ XQ YQ
出力
Ti=2 であるような各クエリについて、答えを 1 行に 1 つずつ、順に出力せよ。
3 4
1 2 3
2 1 3
2 2 3
1 2 3
2 2 3
0
1
2
1 個目のクエリでは 1⊕2⊕3=0 を出力します。
2 個目のクエリでは 2⊕3=1 を出力します。
3 個目のクエリでは A2 が 2⊕3=1 で置き換えられます。
4 個目のクエリでは 1⊕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