链接:https://www.lydsy.com/JudgeOnline/problem.php?id=5301

题面;

5301: [Cqoi2018]异或序列

Time Limit: 10 Sec  Memory Limit: 512 MB
Submit: 476  Solved: 358
[Submit][Status][Discuss]

Description

已知一个长度为 n 的整数数列 a[1],a[2],…,a[n] ,给定查询参数 l、r ,问在 [l,r] 区间内,有多少连续子
序列满足异或和等于 k 。
也就是说,对于所有的 x,y (l≤x≤y≤r),能够满足a[x]^a[x+1]^…^a[y]=k的x,y有多少组。
 

Input

输入文件第一行,为3个整数n,m,k。
第二行为空格分开的n个整数,即ai,a2,….an。
接下来m行,每行两个整数lj,rj,表示一次查询。
1≤n,m≤105,O≤k,ai≤105,1≤lj≤rj≤n

Output

输出文件共m行,对应每个查询的计算结果。

Sample Input

4 5 1
1 2 3 1
1 4
1 3
2 3
2 4
4 4

Sample Output

4
2
1
2
1
 
思路:
因为区间[a,b]异或和可以由区间[1,a-1]和[1,b]异或得到,我们可以先预处理出前缀和,扔到莫队里维护,因为 a^b=k.那么 b = k^a,那么对a[i]来说,能与其异或成k的数就是 k^a[i],加上这个数的数量,在莫队里维护下每个值的数量就好了
 
因为这里存的是前缀和,所以存询问的时候应该是 [l-1,r].
实现代码;
#include<bits/stdc++.h>
using namespace std;
const int M = 1e5+;
int num[M],a[M],blo,k,ans,b[M];
struct node{
int l,r,id;
bool operator < (const node &cmp)const {
if(l/blo == cmp.l/blo) return r < cmp.r;
return l/blo < cmp.l/blo;
}
}q[M]; void add(int x){
ans += num[k^a[x]];
num[a[x]]++;
} void del(int x){
ans -= num[k^a[x]];
num[a[x]]--;
} int main()
{
int n,m;
cin>>n>>m>>k;
blo = sqrt(n);
for(int i = ;i <= n;i ++){
cin>>a[i];
a[i] = a[i]^a[i-];
}
for(int i = ;i <= m;i ++){
cin>>q[i].l>>q[i].r;
q[i].l --;
q[i].id = i;
}
sort(q+,q+m+);
int l = ,r = ;
ans = ;
for(int i = ;i <= m;i ++){
while(l < q[i].l) del(l),l++;
while(l > q[i].l) l--,add(l);
while(r < q[i].r) r++,add(r);
while(r > q[i].r) del(r),r--;
b[q[i].id] = ans;
}
for(int i = ;i <= m;i ++){
cout<<b[i]<<endl;
} }
 

最新文章

  1. Kotlin与Android SDK 集成(KAD 05)
  2. 报错记录:getOutputStream() has already been called for this response
  3. 笔记本做wifi热点
  4. CSS样式覆盖顺序
  5. 织梦DedeCMS删除所有栏目或文章后,新建ID不从1开始的解决方法
  6. MyEclipse6.5注册码(转)
  7. web.xml配置详解 (及&lt;context-param&gt;配置作用 )
  8. Sublime Text 3 中文汉化绿色破解特别版下载
  9. 使文字在div中水平和垂直居中的的css样式为,四个边分别设置阴影样式
  10. 服务器证书安装配置指南(SLB)
  11. 201521123028 《Java程序设计》第8周学习总结
  12. Spring结合log4j(slf4j)
  13. SAP MM 公司间STO里交货单PGI之后自动触发内向交货单功能的实现
  14. Python中的 一些常用技巧函数[.join()]
  15. [物理学与PDEs]第2章第2节 粘性流体力学方程组 2.5 粘性热传导流体动力学方程组的数学结构
  16. nginx break-circus
  17. firewalld 防火墙配置
  18. rabbitmq系统学习(二)
  19. yyb省选前的一些计划
  20. Liferay7 BPM门户开发之25: Liferay7应用程序配置(APPLICATION CONFIGURATION)

热门文章

  1. 粮草先行——Android折叠屏开发技术点(一)
  2. void类型和void* 的用法
  3. .NET ORM框架 SqlSugar4.0 功能快速预览【开源】
  4. 菜鸟之旅——学习线程(Task)
  5. sql 修改、更新、替换 某个字段的部分内容(转载)
  6. layUI框架中文件上传前后端交互及遇到的相关问题
  7. vue-router 页面布局
  8. MongoDB学习(操作集合中的文档)
  9. vue v-for动画bug
  10. C#断点调试时属性get块逻辑执行多次