[异或前缀和]梦境

题目描述
相信你也和 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=1nai=i=1n1

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值