BZOJ5301:[CQOI2018]异或序列——题解
2018-05-08 15:11
417 查看
https://www.lydsy.com/JudgeOnline/problem.php?id=5301
https://www.luogu.org/problemnew/show/P4462
已知一个长度为 n 的整数数列 a[1],a[2],…,a
,给定查询参数 l、r ,问在 [l,r] 区间内,有多少连续子序列满足异或和等于 k 。 也就是说,对于所有的 x,y (l≤x≤y≤r),能够满足a[x]^a[x+1]^…^a[y]=k的x,y有多少组。
开始时还在想怕不是一棵主席树(滑稽)。
想多了,莫队足以解决。
为了方便求区间异或和,把a处理为前缀异或和。
剩下的看代码吧,不太好说,就是注意左端点的移动是要把它之前的点增/删,因为l~r的异或=a[r]^a[l-1]。
#include<cstdio> #include<queue> #include<cctype> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> using namespace std; const int N=1e5+5; inline int read(){ int X=0,w=0;char ch=0; while(!isdigit(ch)){w|=ch=='-';ch=getchar();} while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar(); return w?-X:X; } struct qu{ int pos,l,r; }q ; int a ,ans ,cnt ,sum,n,m,k,s; inline int bel(int x){return (x-1)/s+1;} bool cmp(qu b,qu c){ return bel(b.l)==bel(c.l)?b.r<c.r:b.l<c.l; } inline void add(int x){ sum+=cnt[x^k]; cnt[x]++; } inline void del(int x){ cnt[x]--; sum-=cnt[x^k]; } int main(){ n=read(),m=read(),k=read(); s=sqrt(n); for(int i=1;i<=n;i++)a[i]=a[i-1]^read(); for(int i=1;i<=m;i++){ q[i].pos=i;q[i].l=read();q[i].r=read(); } sort(q+1,q+m+1,cmp); int ql=1,qr=0;cnt[0]++; for(int i=1;i<=m;i++){ while(qr<q[i].r)add(a[++qr]); while(qr>q[i].r)del(a[qr--]); while(ql<q[i].l)del(a[ql-1]),ql++; while(ql>q[i].l)ql--,add(a[ql-1]); ans[q[i].pos]=sum; } for(int i=1;i<=m;i++)printf("%d\n",ans[i]); return 0; }
+++++++++++++++++++++++++++++++++++++++++++
+本文作者:luyouqi233。 +
+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/ +
+++++++++++++++++++++++++++++++++++++++++++
相关文章推荐
- BZOJ5301 [Cqoi2018]异或序列 【莫队】
- [bzoj5301][Cqoi2018]异或序列_莫队
- bzoj 5301: [Cqoi2018]异或序列
- P4462 [CQOI2018]异或序列
- BZOJ_5301_[Cqoi2018]异或序列&&CF617E_莫队
- 洛谷P4462 [CQOI2018]异或序列(莫队)
- [CF617E]XOR and Favorite Number/[CQOI2018]异或序列
- [CQOI 2018]异或序列&[Codeforces 617E]XOR and Favorite Number
- [CQOI 2018]交错序列
- bzoj 5298: [Cqoi2018]交错序列
- BZOJ5298 [CQOI2018] 交错序列 | 矩阵乘法和一个trick
- 搜狐集团2018秋季校招笔试题 kolakoski序列
- 【GDOI2018模拟8.7】图的异或
- 两序列_序对和的异或(考虑位权)
- BZOJ5296 [CQOI2018] 破解D-H协议 【数学】【BSGS】
- [CQOI 2018]破解D-H协议
- 【BZOJ3503】【Cqoi2014】和谐矩阵 高斯消元,解异或方程组
- 给定整数序列求连续子串最大和 - 滴滴出行2018校园招聘内推笔试-研发工程师
- BZOJ5300 [Cqoi2018]九连环 【数学】【FFT】
- 二进制乱搞——Luogu3917 异或序列