小橙的异或和
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

\hspace{15pt}给定一个长度为 n 的正整数序列 a_1,a_2,\dots,a_n。现在有 q 次操作,操作有两种类型:
\hspace{23pt}\bullet\,操作一:给出两个正整数 lr1\leq l\leq r\leq n),对于每个下标 i\in[l,r],将 a_i 的值替换为 \left\lfloor\dfrac{a_i}{i-l+1}\right\rfloor
\hspace{23pt}\bullet\,操作二:询问当前序列中所有元素的异或和,即 \bigoplus\limits_{i=1}^n a_i
\hspace{15pt}请你帮小橙维护这些操作,并回答所有操作二。

【名词解释】
\hspace{15pt}\lfloor x \rfloor:代表对 x 进行下取整操作,得到不超过 x 的最大整数。

输入描述:

\hspace{15pt}第一行输入两个正整数 n,q\left(1\leq n,q\leq 2\times 10^5\right),分别表示序列的长度、操作的次数。
\hspace{15pt}第二行输入 n 个整数 a_1, a_2, \dots, a_n\left(1\leq a_i\leq 10^9\right),表示序列的各个元素。
\hspace{15pt}此后 q 行,第 i 行先输入一个整数 o_i\left(1\leq o_i\leq 2\right),表示第 i 次操作的类型,编号同题干,若 o_i=1,在同一行输入两个整数 l_i,r_i\left(1\leq l_i\leq r_i\leq n\right),表示操作的参数。

输出描述:

\hspace{15pt}对于每一次操作二,新起一行输出一个整数,表示当前序列中所有元素的异或和。
示例1

输入

复制
8 5
8 9 12 9 14 10 21 3
2
1 2 7
2
1 1 5
2

输出

复制
22
5
12

备注:

\hspace{15pt}在几乎全部的情况下,PyPy 的运行速度优于 Python,我们建议您选择对应版本的 PyPy 进行提交、而不是 Python。