题目背景
我好恨 恨这固执到厚颜无耻的人竟和曾经快乐的我同个模样即使信仰和记忆都遍体鳞伤Runtime Error仍在深渊妄想得到你的回望return 0;——《绝世丑角》
在被修改的、破碎不堪的回忆中取出仅有的连续片段。
泠珞还是想知道,能否从中提取出,有意义的回忆呢。
题目描述
对于两个非负整数 a,b,定义它们的 Nim 积为 a⊗b=mex({(a⊗d)⊕(c⊗b)⊕(c⊗d)∣0≤c<a,0≤d<b}),其中 x⊕y 表示 x 与 y 的二进制异或和,mex(S) 表示不存在于 S 中的最小的非负整数。
给定一个长度为 n 的非负整数序列 a1,a2,⋯,an,给定 q 次操作,每次操作有三个参数 (t,ℓ,r)。
- 若 t=1,表示对于 i=ℓ,ℓ+1,⋯,r,令 ai←ai⊗ai。
- 若 t=2,表示查询 aℓ⊕aℓ+1⊕⋯⊕ar。
- 若 t=3,表示查询 aℓ+aℓ+1+⋯+ar。
你需要输出每次查询的结果。
输入格式
第一行两个正整数 n,q。
接下来一行 n 个非负整数,第 i 个表示 ai。
接下来 q 行,每行三个正整数 t,ℓ,r 表示当前操作的参数。
输出格式
对于每次查询操作,输出一行一个非负整数表示答案。
提示
【样例 #1 解释】
第一次操作是查询,输出 6⊕1⊕4⊕2=1。
第二次操作是查询,输出 3+6+1+4=14。
第三次操作是修改,序列变为 [3,6,1,4,3,5]。
第四次操作是查询,输出 3⊕6⊕1⊕4⊕3⊕5=6。
第五次操作是修改,序列变为 [2,5,1,4,3,5]。
第六次操作是查询,输出 3+5=8。
【数据范围】
本题采用捆绑测试。
对于 100% 的数据,1≤n≤2.5×105,0≤ai<232,1≤q≤1×105,1≤t≤3,1≤ℓ≤r≤n。保证最后一次操作是查询操作。
子任务编号 |
分值 |
n≤ |
q≤ |
ai< |
特殊性质 |
1 |
2 |
2.5×105 |
1×105 |
232 |
t=1 |
2 |
11 |
若 t=1,则 ℓ=r |
3 |
19 |
64 |
无 |
4 |
13 |
1×105 |
3×104 |
232 |
t=3 |
5 |
17 |
2.5×105 |
1×105 |
6 |
7 |
若 t=1,则 ℓ=1,r=n |
7 |
23 |
所有 t=1 的操作在 t=1 前 |
8 |
3 |
1×105 |
3×104 |
无 |
9 |
5 |
2.5×105 |
1×105 |