Codeforces Round #340 (Div. 2) E
来源:互联网 发布:网络弊大于利三辩提问 编辑:程序博客网 时间:2024/05/17 07:33
题意:
给你n个数,m个查询,每个查询问你一个区间里面,连续的数的异或值恰好为k的区间有多少个
思路:
莫队算法
如果我处理出前缀的异或,那么我ai^aj(i>j)的值,就是
一个细节就是k是可以为0的,以及
错误及反思:
多个异或可能会比最大的还大,甚至爆int
记录某个数字出现次数的时候,别用map,会T到怀疑人生。
在改变区间的del和add分开写会快很多,反正分开是655ms,写一起951ms,目测是因为多了一个if会多走一次曼哈顿距离和。
代码:
#include<bits/stdc++.h>using namespace std;const int maxn = 100010;int pos[maxn];int n,m;long long k,ans[maxn],now=0,M[1<<20];int val[maxn];struct query{ int l,r,id;}Q[maxn];bool cmp(query a,query b){ if(pos[a.l]==pos[b.l]) return a.r<b.r; return a.l<b.l;}void add(int x){ now+=M[val[x]^k]; M[val[x]]++;}void del(int x){ M[val[x]]--; now-=M[val[x]^k];}int main(){ scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=n;i++){ long long temp; scanf("%I64d",&temp); val[i]=val[i-1]^temp; } int block=sqrt(n); for(int i=1;i<=n;i++) pos[i]=i/block; for(int i=0;i<m;i++) { scanf("%d%d",&Q[i].l,&Q[i].r); Q[i].id=i; } sort(Q,Q+m,cmp); M[0]=1; for(int i=0,L=1,R=0;i<m;i++) { for(;R<Q[i].r;R++) add(R+1); for(;R>Q[i].r;R--) del(R); for(;L<Q[i].l;L++) del(L-1); for(;L>Q[i].l;L--) add(L-2); ans[Q[i].id]=now; } for(int i=0;i<m;i++) printf("%I64d\n",ans[i]);}
阅读全文
0 0
- Codeforces Round #340 (Div. 2) E
- Codeforces Round #340 (Div. 2) E XOR and Favorite Number
- Codeforces Round #340 (Div. 2) E. XOR and Favorite Number
- Codeforces Round #340 (Div. 2) E题 莫队算法
- Codeforces Round #340 (Div. 2). E 莫队算法
- Codeforces Round #340 (Div. 2) E. XOR and Favorite Number
- Codeforces Round #340 (Div. 2) E. XOR and Favorite Number
- Codeforces Round #340 (Div. 2) E 莫队算法
- Codeforces 405E Codeforces Round #238 (Div. 2)E
- Codeforces Round #103 (Div. 2) E题
- Codeforces Round #147 (Div. 2) E
- Codeforces Round #184 (Div. 2) D、E
- Codeforces Round #197 (Div. 2) (C~E)
- Codeforces Round #102 (Div. 2) //缺E
- Codeforces Round #104 (Div. 2) //缺E
- Codeforces Round #105 (Div. 2) //缺E
- Codeforces Round #103 (Div. 2) //缺E
- Codeforces Round #106 (Div. 2) //缺E
- 装ubunt时出行进入界面卡死
- android edittext监听输入完成,输入完成后,获取到值
- 九九乘法表
- jquery部分介绍与操作
- SHA1算法以及Java代码实现(不使用MessageDigest类)
- Codeforces Round #340 (Div. 2) E
- UIGUI创建列表功能几个重要脚本
- gdb调试
- Android EditText 监听回车键
- Java:从键盘获取3个整型数据
- 算法复杂度小记
- 银行排队问题之单队列多窗口加VIP服务(30 分)
- LinkedList
- H264 推流到RTMP服务器