#3156. Range Xor Query

0

Range Xor Query

Range Xor Query

题目描述

我们有一个长度为 NN 的整数序列 AA.
你将对该序列处理 QQ 个查询。在第 ii 个查询中,给定数值 TiT_i、XiX_i 和 YiY_i,执行以下操作:

如果 Ti=1T_i = 1,将 AXiA_{X_i} 替换为 AXi⊕YiA_{X_i} \oplus Y_i。 如果 Ti=2T_i = 2,输出 $A_{X_i} \oplus A_{X_i + 1} \oplus A_{X_i + 2} \oplus \dots \oplus A_{Y_i}$。

这里,a⊕ba \oplus b 表示 aa 和 bb 的按位异或。

什么是按位异或?

整数 AA 和 BB 的按位异或 A⊕BA \oplus B 定义如下:

当 A⊕BA \oplus B 用二进制表示时,位于 2k2^k 位(k≥0k \ge 0)的数字为 11 当且仅当 AA 或 BB(但不是两者)在该 2k2^k 位上为 11,否则为 00。

例如,3⊕5=63 \oplus 5 = 6。(用二进制表示:011⊕101=110011 \oplus 101 = 110。)

输入格式

Input is given from Standard Input in the following format: 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

输出格式

对于每个按接收顺序出现且满足 Ti=2T_i = 2 的查询,在单独的一行中输出对应的结果。

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≤3000001 \le N \le 300000 1≤Q≤3000001 \le Q \le 300000 0≤Ai<2300 \le A_i \lt 2^{30} TiT_i is 11 or 22. If Ti=1T_i = 1, then 1≤Xi≤N1 \le X_i \le N and 0≤Yi<2300 \le Y_i \lt 2^{30}. If Ti=2T_i = 2, then 1≤Xi≤Yi≤N1 \le X_i \le Y_i \le N. All values in input are integers.在第一个查询中,我们输出 1⊕2⊕3=01 \oplus 2 \oplus 3 = 0.
在第二个查询中,我们输出 2⊕3=12 \oplus 3 = 1.
在第三个查询中,我们将 A2A_2 替换为 2⊕3=12 \oplus 3 = 1.
在第四个查询中,我们输出 1⊕3=21 \oplus 3 = 2.

标签: AtCoder|abc185F

来源

AtCoder|abc185F