「luogu4462」[CQOI2018] 异或序列
「luogu4462」[CQOI2018]异或序列
一句话题意
输入 \(n\) 个数,给定\(k\),共 \(m\) 组询问,输出第 \(i\) 组询问 \(l_i\) \(r_i\) 中有多少个连续子序列的异或和等于 \(k\)。数据范围均在 \([0,1e5]\)。
本题不强制在线,故莫队。
记序列 \(a\) 的前缀异或和 \(pre\),用一个桶 \(t_i\) 记录当前查询区间内前缀异或和为 \(i\) 的数量。
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
inline int in() {
int x=0;char c=getchar();bool f=false;
while(c<'0'||c>'9') f|=c=='-', c=getchar();
while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48), c=getchar();
return f?-x:x;
}
const int N = 1e5+5;
int n, m, k, cur, pre[N], t[N<<1], blo, bl[N], ans[N];
struct query {
int l, r, id;
inline friend bool operator < (const query &x, const query &y) {
return bl[x.l]==bl[y.l]?x.r<y.r:x.l<y.l;
}
}q[N];
inline void add(int u) {
cur+=t[u^k];
t[u]++;
}
inline void rem(int u) {
t[u]--;
cur-=t[u^k];
}
int main() {
n=in(), m=in(), k=in();
blo=(int)sqrt(n+1);
for(int i=1;i<=n;++i) {
bl[i]=(i-1)/blo+1;
pre[i]=pre[i-1]^in();
}
for(int i=1;i<=m;++i) q[i]=(query){in()-1, in(), i};
std::sort(q+1, q+1+m);
for(int i=1, l=1, r=0;i<=m;++i) {
for(;r<q[i].r;add(pre[++r]));
for(;r>q[i].r;rem(pre[r--]));
for(;l<q[i].l;rem(pre[l++]));
for(;l>q[i].l;add(pre[--l]));
ans[q[i].id]=cur;
}
for(int i=1;i<=m;++i) printf("%d\n", ans[i]);
return 0;
}
「luogu4462」[CQOI2018] 异或序列的更多相关文章
- bzoj 5301: [Cqoi2018]异或序列 (莫队算法)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=5301 题面; 5301: [Cqoi2018]异或序列 Time Limit: 10 Sec ...
- bzoj 5301 [Cqoi2018]异或序列 莫队
5301: [Cqoi2018]异或序列 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 204 Solved: 155[Submit][Status ...
- BZOJ5301: [Cqoi2018]异或序列(莫队)
5301: [Cqoi2018]异或序列 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 400 Solved: 291[Submit][Status ...
- [bzoj5301][Cqoi2018]异或序列_莫队
异或序列 bzoj-5301 Cqoi-2018 题目大意:题目链接. 注释:略. 想法: 由于a^a=0这个性质,我们将所有的数变成异或前缀和. 所求就变成了求所有的$l_i\le x<y\l ...
- BZOJ_5301_[Cqoi2018]异或序列&&CF617E_莫队
Description 已知一个长度为 n 的整数数列 a[1],a[2],…,a[n] ,给定查询参数 l.r ,问在 [l,r] 区间内,有多少连续子 序列满足异或和等于 k . 也就是说,对于所 ...
- bzoj5301[CQOI2018]异或序列
题意 已知一个长度为 n 的整数数列 a[1],a[2],-,a[n] ,给定查询参数 l.r ,问在 [l,r] 区间内,有多少连续子 序列满足异或和等于 k . 也就是说,对于所有的 x,y (l ...
- BZOJ5301:[CQOI2018]异或序列(莫队)
Description 已知一个长度为 n 的整数数列 a[1],a[2],…,a[n] ,给定查询参数 l.r ,问在 [l,r] 区间内,有多少连续子 序列满足异或和等于 k . 也就是说,对于所 ...
- LuoguP4462 [CQOI2018]异或序列
https://zybuluo.com/ysner/note/1124952 题面 给你一个大小为\(n\)的序列,然后给你一个数字\(k\),再给出\(m\)组询问,询问给出一个区间,问这个区间里面 ...
- 并不对劲的复健训练-bzoj5301:loj2534:p4462 [CQOI2018]异或序列
题目大意 给出一个序列\(a_1,...,a_n\)(\(a,n\leq 10^5\)),一个数\(k\)(\(k\leq 10^5\)),\(m\)(\(m\leq10^5\))次询问,每次询问给\ ...
随机推荐
- openstack第五章:cinder
第五篇cinder— 存储服务 一.cinder 介绍: 理解 Block Storage 操作系统获得存储空间的方式一般有两种: 通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接 ...
- git命令的理解与扩展
Git的模式如图: Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Repository:仓库区(或本地仓库) 一.新建代码库 # 查看gi ...
- flex.css
flex.css:https://codepen.io/webstermobile/pen/apXEER/
- 工具(2): 极简MarkDown排版介绍(How to)
如何切换编辑器 切换博客园编辑器为MarkDown:MarkDown Editor 选择一个在线编辑和预览站点:StackEdit 如何排版章节 MarkDown: 大标题 ========== 小标 ...
- antd form 自定义验证表单使用方法
import React from 'react'; import classNames from 'classnames'; export default class FormClass exten ...
- hdu4843(NOI2000) 古城之谜 (trie树+DP)
Description 著名的考古学家石教授在云梦高原上发现了一处古代城市遗址.让教授欣喜的是在这个他称为冰峰城(Ice-Peak City)的城市中有12块巨大石碑,上面刻着用某种文字书写的资料,他 ...
- 多线程的休息室WaitSet详细介绍
1. 所有对象都会有一个wait set,用于存放调用了该对象wait方法之后进入block状态的线程; 2. 线程被notify之后,不一定会立即执行; 3. 线程从wait set中唤醒的顺序不一 ...
- 网络知识之http请求
使用http超文本传输协议来访问web服务器 它定义了客户端和服务器之间交互的信息内容和步骤. 客户端解析url后发送请求消息---->服务器(解析请求消息,完成工作,包装结果为响应消息)--- ...
- Tomcat启动报错,报找不到gdk_custom.jar
在 tomcat/conf/context.xml 中新增如下配置 <Context> ... <JarScanner scanManifest="false"/ ...
- 科学地增加postgresql最大连接数
PG配置文件路径 /etc/postgresql/9.3/main/postgresql.conf 首先如何查看最大连接数 This SQL will help you select max_conn ...