[CF617E]XOR and Favorite Number/[CQOI2018]异或序列
题目大意:
给定一个长度为$n(n\leq10^5)$的数列$A$和数$k$$(A_i,k\leq10^6)$。$m$组询问,每次询问区间$[l,r]$中有多少对$i,j(l\leq i\leq j\leq r)$,满足$\oplus_{x=i}^jA_x=k$。
思路:
莫队。
首先求出数列$A$的前缀异或和$pre[i]$。每次加入一个数$x$时,$cnt[x]++$,$ans+=cnt[x\oplus k]$。删除同理。
注意区间的范围,因为$\oplus_{x=i}^jA_x=pre[j]\oplus pre[i-1]$,所以对于询问$[l,r]$,实际维护的区间应该是$[l-1,r]$。
1 #include<cmath> 2 #include<cstdio> 3 #include<cctype> 4 #include<algorithm> 5 typedef long long int64; 6 inline int getint() { 7 register char ch; 8 while(!isdigit(ch=getchar())); 9 register int x=ch^'0'; 10 while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0'); 11 return x; 12 } 13 const int N=100001,M=100000,logK=20; 14 int k,a[N],bel[N],cnt[1<<logK]; 15 int64 ans[M],tmp; 16 struct Query { 17 int l,r,id; 18 bool operator < (const Query &another) const { 19 return bel[l]<bel[another.l]||(bel[l]==bel[another.l]&&bel[r]<bel[another.r]); 20 } 21 }; 22 Query q[M]; 23 inline void ins(const int &x) { 24 tmp+=cnt[a[x]^k]; 25 cnt[a[x]]++; 26 } 27 inline void del(const int &x) { 28 cnt[a[x]]--; 29 tmp-=cnt[a[x]^k]; 30 } 31 int main() { 32 const int n=getint(),m=getint(),block=sqrt(n); 33 k=getint(); 34 for(register int i=1;i<=n;i++) { 35 a[i]=a[i-1]^getint(); 36 bel[i]=i/block; 37 } 38 for(register int i=0;i<m;i++) { 39 const int l=getint()-1,r=getint(); 40 q[i]=(Query){l,r,i}; 41 } 42 std::sort(&q[0],&q[m]); 43 for(register int i=0,l=0,r=-1;i<m;i++) { 44 while(r<q[i].r) ins(++r); 45 while(l>q[i].l) ins(--l); 46 while(r>q[i].r) del(r--); 47 while(l<q[i].l) del(l++); 48 ans[q[i].id]=tmp; 49 } 50 for(register int i=0;i<m;i++) { 51 printf("%lld\n",ans[i]); 52 } 53 return 0; 54 }
转载于:https://www.cnblogs.com/skylee03/p/8425097.html
[CF617E]XOR and Favorite Number/[CQOI2018]异或序列相关推荐
- CF617E XOR and Favorite Number
CF617E XOR and Favorite Number 已知一个序列 \(a_1,\ a_2,\ \cdots,\ a_n\) 和 \(k\) ,\(m\) 次询问给出 \(l,\ r\) ,求 ...
- CF617E. XOR and Favorite Number
1 /* 2 CF617E. XOR and Favorite Number 3 http://codeforces.com/contest/617/problem/E 4 莫队算法 5 题意:求l, ...
- [CQOI2018]异或序列
[CQOI2018]异或序列 题意: 给定1个整数K,离线询问[l,r]中有多少子区间xor和=K. 题解: 异或有个重要的性质:它的逆运算就是自身 我们维护该数列的前缀异或和a[x],表示1到x的区 ...
- [CQOI2018] 异或序列
题目链接:戳我 哈哈哈我竟然秒切了省选题 莫队+异或. 考虑异或的性质,一个数同时异或两次等于没有进行操作.那么我们设a[i]为前i个数的异或和,显然对于一个区间\([l,now]\),\(a[l-1 ...
- BZOJ5301:[CQOI2018]异或序列——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5301 https://www.luogu.org/problemnew/show/P4462 已知 ...
- CodeForces 617 E. XOR and Favorite Number
题目链接: CodeForces 617 E. XOR and Favorite Number 题目描述: 给出n个数,m次查询,每次查询在区间[l, r]里面有多少对(i, j),满足ai ^ ai ...
- Codeforces617E XOR and Favorite Number (普通莫队)
题目链接: XOR and Favorite Number 2021.11.11更新了解题思路和代码 大致题意 给定一个长度为nnn的序列aaa, 和一个固定的数值kkk. 有mmm次询问, 每次询问 ...
- 【CF 617E】 XOR and Favorite Number (Mo's algorithm)
[CF 617E] XOR and Favorite Number (Mo's algorithm) E. XOR and Favorite Number time limit per test 4 ...
- 6759: 异或序列
6759: 异或序列 时间限制: 1 Sec 内存限制: 128 MB 题目描述 已知一个长度为n的整数数列a1,a2,-,an,给定查询参数l.r,问在al,al+1,-,ar区间内,有多少子序列 ...
- Loj 2534 异或序列
Loj 2534 异或序列 考虑莫队离线处理.每加一个数,直接询问 \(a[x]\oplus k\) 的前/后缀数目即可,减同理. 利用异或的优秀性质,可以维护异或前缀和,容易做到每次 \(O(1)\ ...
最新文章
- 牛顿棺材板快盖不住了:用深度神经网络解决三体问题,提速一亿倍
- mongodb数据库显示obj_MongoDB基础(三)—基本操作及管理 | leon的博客
- c++中的异常---3(系统标准异常库,编写自己异常类)
- org.springframework.http.converter.HttpMessageNotWritableException:
- 唯一索引与主键索引的比较
- java 日期操作工具类_java8操作日期的工具类
- html 怎么给li空格,html 空格
- 算数运算符与关系运算符_Swift进阶三——运算符相关
- 漫漫长路十多小时,谁是机上WiFi的“业界良心”?
- Qt+VS+opencv+zbar打开本机摄像头实现二维码扫码识别功能
- Excel VBA-批量导出图片.vba
- 得物购买截图生成_这应该是目前为止,iPhone上最好的长截图工具!
- python字符串重复元素的删除_python删除列表重复元素
- 搭建简单的企业网站,华为云速建站和阿里建站哪个好?
- MySQL 第十三章 约束(★★★★★)
- Blob和File对象API与兼容性问题
- 说明书丨Epigentek EpiNext 高灵敏免疫共沉淀测序试剂盒
- 因为卡农,重拾《我的野蛮女友》
- 程序员工具大全【持续更新】
- 哈马德国际机场在全球最佳机场评选中排名第一;合肥君悦酒店浪漫呈现“悦-七夕”限定晚宴 | 全球旅报...
热门文章
- Kaggle酒推荐,winemag-data-130k-v2.csv
- 203.移除链表元素
- 16广义逆的计算及应用
- win10怎样更改系统字体_怎样用电脑光盘重装win10系统?电脑光盘重装系统步骤图文教程...
- 为什么xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度?
- 信息安全收集注意事项
- Raki的统计学习方法笔记0x2章:感知机
- 操作系统面试常问问题
- dao获取到mysql存储函数_GreenDao3.0使用
- FineReport中统计列中不同数据的个数