#abc185f. [abc185_f]Range Xor Query

[abc185_f]Range Xor Query

问题描述

我们有一个长度为 NN 的整数序列 AA
你将在这个序列上处理 QQ 个查询。在第 ii 个查询中,给定值 TiT_iXiX_iYiY_i,请执行以下操作:

  • 如果 Ti=1T_i = 1,将 AXiA_{X_i} 替换为 AXioplusYiA_{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}$。

这里,aoplusba \\oplus b 表示 aabb 的按位异或。

什么是按位异或?

整数 AABB 的按位异或 AoplusBA \\oplus B 定义如下:

  • 当把 AoplusBA \\oplus B 用二进制表示时,在第 2k2^k 位上(kgeq0k \\geq 0)的数字为 11,当且仅当 AABB 中有且仅有一个数字在第 2k2^k 位上为 11,否则为 00

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

约束条件

  • 1N3000001 \le N \le 300000
  • 1Q3000001 \le Q \le 300000
  • 0Ai<2300 \le A_i \lt 2^{30}
  • TiT_i 取值为 1122
  • 如果 Ti=1T_i = 1,则 1XiN1 \le X_i \le N,并且 0Yi<2300 \le Y_i \lt 2^{30}
  • 如果 Ti=2T_i = 2,则 1XiYiN1 \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

输出

对于每个查询中的 Ti=2T_i = 2,按接收顺序逐行打印结果。


示例输入 1

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

示例输出 1

0
1
2

在第一个查询中,我们打印 1oplus2oplus3=01 \\oplus 2 \\oplus 3 = 0
在第二个查询中,我们打印 2oplus3=12 \\oplus 3 = 1
在第三个查询中,我们用 2oplus3=12 \\oplus 3 = 1 替换了 A2A_2
在第四个查询中,我们打印 1oplus3=21 \\oplus 3 = 2


示例输入 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

示例输出 2

1
0
5
3
0