题目描述
相信你也和 Oier-Kry 一样,码了几行代码,就轻松搞定其等价电阻的值。
Kry 忽然间意识到不能总是不干正经事,联赛马上就来了, 该整理下 U 盘,好好复习总结下,于是
插上 U 盘,开始翻阅以前学习的资料。
由于前面的更换教室地板,再加上刚才解决电路连接问题, Kry 有点累了,不知道哪里来的困意,
在学习压力这么大的情况下,居然不知不觉的睡着了„„
Kry 在梦里回到了初中时代, 仿佛感觉好像是 Mir.Z 在教室前面讲解联赛的题目,但又感觉不是,
这个梦怎么这么不真实。 难道 Mir.Z 讲的题目和今年联赛有关, Kry 努力的回想着。由于 Kry 想让梦
境清晰一点,着急的一下子从梦里惊醒了。 隐约只记得 Mir.Z 所讲的题目大概,具体描述如下:
有一个整数序列,暂且将其称为 XORbonacci 序列。序列中的第 N 个元素用 X[N]表示。该序列
按照以下方式递归定义:
X[1]=A1,
X[2]=A2,
„„„
X[k]=Ak;
X[N]=X[N-1]⊕ X[N-2]⊕„⊕XN-k
Mir.Z 将会提出 Q 次询问,每次询问给出两个整数 L 和 R。而每次询问的答案即以下式子的值:
X[L]⊕X[L+1]⊕„„„⊕ X[R-1]⊕X[R]。注意:题目中的符号"⊕ "在 Kry 的梦里应该是 XOR 异或。(PS:
Pascal 语言异或运算符是 xor, C 语言或者 C++语言异或运算符是^)
Oier 们抓紧解决这个小题吧,万一联赛要是真的出呢?那岂不是赚到了。
输入
第 1 行输入包含一个整数 k;
接下来的一行包含 k 个整数,第 i 个整数 Ai 表示 XORbonacci 序列中的第 i 个元素;
接下来一行包含一个整数 Q;
接下来的 Q 行,每行包含两个整数 L[i]和 R[i],表示 Mir.Z 第 i 次询问的下标区间;
输出
输出共 Q 行,第 i 行输出 Mir.Z 的第 i 次询问的结果。
样例输入 Copy
4
1 3 5 7
3
2 2
2 5
1 5
样例输出 Copy
3 1 0
提示
【输入样例 2】
5
3 3 4 3 2
4
1 2
1 3
5 6
7 9
【输出样例 2】
0 4 7 4
【数据规模】
对于 30%的数据: 1≤k≤5,000; 1≤Q≤5,000; 1≤L[i]≤R[i]≤5,000; 1≤Ai≤5,000;
对于 50%的数据: 1≤k≤100,000; 1≤Q≤100,000; 1≤L[i]≤R[i]≤500,000; 1≤Ai≤5,000;
对于 100%的数据: 1≤k≤100,000; 1≤Q≤100,000; 1≤L[i]≤R[i]≤1018; 1≤Ai≤1018;
分析
根据前缀和,可以推出异或前缀和预处理,即:
∑ i = 1 n ⊕ a i = ∑ i = 1 n − 1 ⊕ a i + a n \sum\limits_{i=1}^n \oplus a_i = \sum\limits_{i=1}^{n-1} \oplus a_i + a_n i=1∑n⊕ai=i=1∑n−1