#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$,定义如下:
什么是按位异或?
例如,$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$。
- 输入中的所有值都是整数。
输入
输入从标准输入读入,格式如下:
$A_1 \hspace{7pt} A_2 \hspace{7pt} A_3 \hspace{5pt} \dots \hspace{5pt} A_N$
输出
对于每个满足 $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