#ZF1130. 异或
异或
Description
Arctic_Bake 对位运算很不熟悉,于是找 guanmiantang_h 要一道位运算相关的题。
guanmiantang_h 拿出了一个长度为 的数组 。在一次询问中将给出两个整数 ,要求所有 中对任意一个 , 都要参与异或运算,求这些数异或运算在一起的结果。
``这是不是太简单了?'' Arctic_Bake 问。
``你先别急'' guanmiantang_h 说。
这样的询问总共有 次,每次会给出两个整数 。每次询问后,都需要输出将下标 和 之间的所有数异或运算在一起的结果。
Format
Input
第一行有两个整数 。
第二行有 个整数 ,表示那个数组。
接下来有 行,每行有两个整数 ,表示每次询问进行运算的两个端点。
Output
输出有 行。
第 行应该输出一个整数,表示第 次询问中两段中间所有数异或运算在一起的结果。
Samples
4 3
2 5 9 1000000000
1 4
2 3
1 1
1000000014
12
2
Note
对于 ,若 和 二进制下对应 bit 位不同,则为 ,否则为 。在 C 语言中,用 ^ 来表示。
比如 。
异或有这样一些性质:
归零律:;
恒等律:;
交换律:;
结合律:$ a \bigoplus b \bigoplus c = a \bigoplus (b \bigoplus c) = (a \bigoplus b) \bigoplus c$; 自反: ;
Limitation
1s, 1024KiB for each test case.