A. 子段与子段
题目描述
对于一个序列a1,a2,…,an,子段是指它的一个连续部分,即al,al+1,…,ar
容易发现,一个长度为n的序列有\frac{n(n+1)}{2}个子段。例如序列3,7,4有下列子段:
(3),(3,7),(3,7,4),(7),(7,4),(4)
Mia希望分别求出这些子段的异或和,再将它们异或起来。但是Cierra觉得这太简单了,所以她提出了q个询问,每次给出一个区间[L,R],希望你将这个下标区间对应的子段截取出来,回答上面的询问。
具体来说,对询问[L,R],你需要回答a_L,a_{L+1},\dots,a_R的所有子段异或和的异或和。
输入格式
第一行包含两个用空格隔开的整数n,q
第二行包含n个用空格隔开的整数a_1,a_2,\dots,a_n
之后q行,每行包含两个用空格隔开的整数L,R,依次代表q组询问
输出格式
对每个询问输出一行,包含一个整数,为该区间所有子段异或和的异或和
样例输入
5 3
1 2 3 4 5
1 3
2 4
2 5
样例输出
2
6
0
数据限制
对于30%的数据,n,q \leq 500
对于60%的数据,n,q \leq 5000
对于100%的数据,1 \leq n,q \leq 200000,0 \leq a_i \leq 10^9,每一组L,R均满足1 \leq L \leq R \leq n
时空限制
1000ms, 512MB