#AT1696. F - Range Xor Query

F - Range Xor Query

F - 区间异或查询

得分:$600$ 分

问题描述

给定一个长度为 $N$ 的整数序列 $A$。
你需要对这个序列进行 $Q$ 次查询。在第 $i$ 次查询中,给定值 $T_i$、$X_i$ 和 $Y_i$,执行以下操作:

  • 如果 $T_i = 1$,将 $A_{X_i}$ 替换为 $A_{X_i} \oplus Y_i$。
  • 如果 $T_i = 2$,打印 $A_{X_i} \oplus A_{X_i + 1} \oplus A_{X_i + 2} \oplus \dots \oplus A_{Y_i}$。

这里,$a \oplus b$ 表示 $a$ 和 $b$ 的按位异或。

什么是按位异或?

整数 $A$ 和 $B$ 的按位异或,$A \oplus B$,定义如下:

  • 当 $A \oplus B$ 在二进制下写出时,$2^k$ 位($k \geq 0$) 是 $1$ 当且仅当 $A$ 或 $B$ 的对应位有一个为 $1$,另一个为 $0$。
例如,$3 \oplus 5 = 6$。(在二进制下:$011 \oplus 101 = 110$)

约束

  • $1 \le N \le 300000$
  • $1 \le Q \le 300000$
  • $0 \le A_i \lt 2^{30}$
  • $T_i$ 是 $1$ 或 $2$。
  • 如果 $T_i = 1$,那么 $1 \le X_i \le N$ 且 $0 \le Y_i \lt 2^{30}$。
  • 如果 $T_i = 2$,那么 $1 \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

输出

对于每个满足 $T_i = 2$ 的查询,按顺序打印一行结果。


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

在第一个查询中,我们打印 $1 \oplus 2 \oplus 3 = 0$。
在第二个查询中,我们打印 $2 \oplus 3 = 1$。
在第三个查询中,我们将 $A_2$ 替换为 $2 \oplus 3 = 1$。
在第四个查询中,我们打印 $1 \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