题目描述
長さ 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)。
输入格式
入力は以下の形式で標準入力から与えられる。
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 つずつ、順に出力せよ。
题目大意
维护序列 A1,A2,…,An。
Q 次操作,每次给出 T,X,Y:
- T=1:将 AX 替换为 AX⊕Y
- T=2:输出 $A_{X}\oplus A_{X+1}\oplus A_{X+2}\oplus\dots\oplus A_Y$。
其中 ⊕ 是按位异或。
3 4
1 2 3
2 1 3
2 2 3
1 2 3
2 2 3
0
1
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
提示
制約
- 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
- 入力は全て整数
Sample Explanation 1
1 個目のクエリでは 1 ⊕ 2 ⊕ 3 = 0 を出力します。 2 個目のクエリでは 2 ⊕ 3 = 1 を出力します。 3 個目のクエリでは A2 が 2 ⊕ 3 = 1 で置き換えられます。 4 個目のクエリでは 1 ⊕ 3 = 2 を出力します。