#P9334. 区间异或

区间异或

问题陈述

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

  • 如果 Ti=1T_i = 1,则用 AXiYiA_{X_i} \oplus Y_i 替换 AXiA_{X_i}
  • 如果 Ti=2T_i = 2,则打印 $A_{X_i} \oplus A_{X_i + 1} \oplus \ldots \oplus A_{Y_i}$。

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

约束条件

  • 1N3000001 \le N \le 300000
  • 1Q3000001 \le Q \le 300000
  • 0Ai<2300 \le A_i < 2^{30}
  • TiT_i 为 1 或 2。
  • 如果 Ti=1T_i = 1,那么 1XiN1 \le X_i \le N0Yi<2300 \le Y_i < 2^{30}
  • 如果 Ti=2T_i = 2,那么 1XiYiN1 \le X_i \le Y_i \le N
  • 输入中的所有值都是整数。

输入格式

  • 输入的第一行包含两个整数,NNQQ,分别代表序列的长度和查询的数量。
  • 第二行包含 NN 个整数,表示序列 AA
  • 接下来的 QQ 行,每行包含三个整数 TiT_iXiX_iYiY_i,描述一个查询。

输出格式

对于每个接收到的 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

在第一个查询中,我们打印 123=01 \oplus 2 \oplus 3 = 0。 在第二个查询中,我们打印 23=12 \oplus 3 = 1。 在第三个查询中,我们用 23=12 \oplus 3 = 1 替换 A2A_2。 在第四个查询中,我们打印 13=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