[CQOI2018]异或序列
[CQOI2018]异或序列
题意:
给定1个整数K,离线询问[l,r]中有多少子区间xor和=K。
题解:
异或有个重要的性质:它的逆运算就是自身
我们维护该数列的前缀异或和a[x],表示1到x的区间异或和,这样问题就变成了在区间[l-1,r]中,有多少对数异或为k, 然后一边莫队一边维护col[j],col[j]表示a[x]=j的个数。
我们设y = a[x]^k -----> a[x] ^ y = k
这样每加入第x个位置,此时区间内有多少y,答案就加多少,ans+=col[y]
删去同理
代码:
#include<cmath>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct node{int l,h,r;
}q[100001];
int col[200001],n,m,ans,r; //col[i]表示当前区间有多少个数异或和为i
int a[100001],num[100001],k,blo,l;
inline bool cmp(node c,node d){if (c.l/blo!=d.l/blo) return c.l<d.l;if ((c.l/blo)&1) return c.r<d.r; return c.r>d.r;
}
inline void add(int x){ans+=col[a[x]^k]; col[a[x]]++;}
inline void del(int x){col[a[x]]--; ans-=col[k^a[x]];}
int main(){scanf("%d%d%d",&n,&m,&k); blo=sqrt(n);for (int i=1; i<=n; i++){scanf("%d",&a[i]);//bl[i]=(i-1)/blo+1;a[i]=a[i-1]^a[i];}for (int i=1; i<=m; i++){scanf("%d%d",&q[i].l,&q[i].r);q[i].h=i; q[i].l--;}sort(q+1,q+m+1,cmp);l=1;for (int i=1; i<=m; i++){while (l>q[i].l) l--,add(l);while (l<q[i].l) del(l),l++;while (r<q[i].r) r++,add(r);while (r>q[i].r) del(r),r--;num[q[i].h]=ans;}for (int i=1; i<=m; i++) printf("%d\n",num[i]);return 0;
}
[CQOI2018]异或序列相关推荐
- [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 已知 ...
- 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)\ ...
- 【LOJ】#2534. 「CQOI2018」异或序列
题解 每个数都处理成前缀和,就相当于问\([l - 1,r]\)有几个数对\(x,y\),\(sum[x] ^ sum[y] = k\) 直接莫队即可 代码 #include <bits/std ...
- luogu4462 异或序列
题目大意 给出n,m,k,有n个数的序列,m次询问一段区间,问异或和等于K的子区间的个数. 题解 本题一看就是莫队.但要解决该题需要以下性质: 定理: $$a\oplus b=c\Leftrighta ...
- 【Luogu】P4462异或序列(莫队)
题目链接 观察什么时候x到y之间那一段可以被统计 xorsum[x-1]^xorsum[y]=k xorsum[x-1]=xorsum[y]^k||xorsum[y]=xorsum[x-1]^k 莫队 ...
- Jozky 刷题目录
文章目录 本目录参考OI-Wiki 还未解决专区 算法基础 枚举 模拟 递归&分治 贪心 排序 前缀和&差分 二分 倍增 构造 搜索 DFS && BFS 双向搜索 启 ...
- CF617E XOR and Favorite Number
CF617E XOR and Favorite Number 已知一个序列 \(a_1,\ a_2,\ \cdots,\ a_n\) 和 \(k\) ,\(m\) 次询问给出 \(l,\ r\) ,求 ...
最新文章
- (C++)CSP202009-1 称检测点查询
- 网站过度优化该怎样解决?
- [征求意见]团队发展、技术交流主题、团队机构
- oracle 052考试,Oracle OCP认证考试题库解析052-5
- win7打不开qq文件怎么办
- 苹果发文谈iPhone SE的核心竞争力,网友:难道不是便宜吗?
- linux怎么编译sharedptr,如何使用智能指针(例如auto_ptr r shared_ptr)在Linux上使用C++生成链接列表数据结构?...
- 【滤波器】基于matlab GUI分数延迟滤波器设计【含Matlab源码 1347期】
- apicloud如何对接大牛直播SDK
- linux下使用iptables NAT上网
- php echo字符串连接符逗号,和句号.的区别,使用实例
- 女友升级到老婆的过程中发生的bug
- 计算机毕业设计Java-超市会员积分管理系统-(源码+系统+mysql数据库+lw文档)
- 《数据库系统概论(第五版)》学习资料
- 7、面向对象设计:共性VS个性
- 程序员,你还没有软技能吗?难怪你不幸福
- PHP Laravel 队列技巧:Fail、Retry 或者 Delay
- 【obs】OBS Library D3D11 OpenGL wrapper
- iOS 面试策略之简历的准备到面试流程
- 埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛A题Wasserstein Distance
热门文章
- 知乎超高赞:都有哪些习惯值得长期坚持?
- 又来了!深度学习PyTorch与TensorFlow到底哪家强?
- 看到这一幕,我甚至都想戒烟了。。 | 今日最佳
- python 线程 的类库_python类库32[多线程]
- HTML怎么做类似QQ聊天气泡,h5实现QQ聊天气泡的实例介绍
- 11尺寸长宽 iphone_LED显示屏的尺寸规格计算方法
- linux下安装服务,linux下的软件服务安装管理
- java class文件 代码_java_基础——用代码编译.java文件+加载class文件
- python 创建目录_第二天:Python中目录及文件操作
- [设计模式]代理模式