atcoder#ABC185F. [ABC185F] Range Xor Query

[ABC185F] Range Xor Query

题目描述

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

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

ただし a  b a\ \oplus\ b a a b b のビット単位 xor を表します。
ビット単位 xor とは 整数 A, B A,\ B のビット単位 xor 、A  B A\ \oplus\ B は、以下のように定義されます。

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

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

输入格式

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

N N Q Q $ A_1\ \hspace{7pt}\ A_2\ \hspace{7pt}\ A_3\ \hspace{5pt}\ \dots\ \hspace{5pt}\ A_N $ T1 T_1 X1 X_1 Y1 Y_1 T2 T_2 X2 X_2 Y2 Y_2 T3 T_3 X3 X_3 Y3 Y_3   \hspace{22pt}\ \vdots TQ T_Q XQ X_Q YQ Y_Q

输出格式

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

题目大意

维护序列 A1,A2,,AnA_1,A_2,\dots,A_n

QQ 次操作,每次给出 T,X,YT,X,Y

  • T=1T=1:将 AXA_X 替换为 AXYA_X \oplus Y
  • T=2T=2:输出 $A_{X}\oplus A_{X+1}\oplus A_{X+2}\oplus\dots\oplus A_Y$。

其中 \oplus 是按位异或。

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\ \le\ N\ \le\ 300000
  • 1  Q  300000 1\ \le\ Q\ \le\ 300000
  • 0  Ai < 230 0\ \le\ A_i\ \lt\ 2^{30}
  • Ti T_i 1 1 または 2 2
  • Ti = 1 T_i\ =\ 1 なら 1  Xi  N 1\ \le\ X_i\ \le\ N かつ 0  Yi < 230 0\ \le\ Y_i\ \lt\ 2^{30}
  • Ti = 2 T_i\ =\ 2 なら 1  Xi  Yi  N 1\ \le\ X_i\ \le\ Y_i\ \le\ N
  • 入力は全て整数

Sample Explanation 1

1 1 個目のクエリでは 1  2  3 = 0 1\ \oplus\ 2\ \oplus\ 3\ =\ 0 を出力します。 2 2 個目のクエリでは 2  3 = 1 2\ \oplus\ 3\ =\ 1 を出力します。 3 3 個目のクエリでは A2 A_2 2  3 = 1 2\ \oplus\ 3\ =\ 1 で置き換えられます。 4 4 個目のクエリでは 1  3 = 2 1\ \oplus\ 3\ =\ 2 を出力します。