题目描述

已知一个长度为n的整数数列 a1,a2,...,ana_1,a_2,...,a_na1​,a2​,...,an​ ,给定查询参数l、r,问在 al,al+1,...,ara_l,a_{l+1},...,a_ral​,al+1​,...,ar​ 区间内,有多少子序列满足异或和等于k。也就是说,对于所有的x,y (I ≤ x ≤ y ≤ r),能够满足 ax⨁ax+1⨁...⨁ay=ka_x \bigoplus a_{x+1} \bigoplus ... \bigoplus a_y = kax​⨁ax+1​⨁...⨁ay​=k 的x,y有多少组。

输入输出格式

输入格式:

输入文件第一行,为3个整数n,m,k。

第二行为空格分开的n个整数,即 a1,a2,..ana_1,a_2,..a_na1​,a2​,..an​ 。

接下来m行,每行两个整数 lj,rjl_j,r_jlj​,rj​ ,表示一次查询。

输出格式:

输出文件共m行,对应每个查询的计算结果。

输入输出样例

输入样例#1:

4 5 1
1 2 3 1
1 4
1 3
2 3
2 4
4 4
输出样例#1:

4
2
1
2
1

说明

对于30%的数据, 1≤n,m≤10001 ≤ n, m ≤ 10001≤n,m≤1000

对于100%的数据, 1≤n,m≤105,0≤k,ai≤105,1≤lj≤rj≤n

Solution:

  这题面有毒,我不改了,题意就是$10^5$个数,$10^5$次查询,每次询问区间$[l,r]$中的子序列异或和为$k$的值的个数。

  首先,很容易想到异或的性质$a\;xor\;b\;xor\;b=a$,所以用前缀异或和$a[i]$表示前$i$个数的异或和,那么子序列$p_x\;xor\;p_{x+1}…\;xor\;p_{y-1}\;xor\;p_{y}=a_y\;xor\;a_{x-1}$。

  若$a_{x-1}\;xor\;a_y=k$,则$a_{x-1}=a_y\;xor\;k$,于是本题预处理出前缀异或和,将每个区间的下界$l-1$(因为$[l,r]$的异或和为$a[r]\;xor\;a[l-1]$),加减一个数等同于修改并统计当前区间$a_p\;xor\;k$出现的个数,于是本题就成了一道莫队模板题——查询区间中某个数的个数。

代码:

#include<bits/stdc++.h>
#define il inline
#define ll long long
using namespace std;
const int N=;
int n,m,k,a[N],pos[N],ans[N],num[N*],tot;
struct data{
int l,r,id;
}t[N];
il int gi(){
int a=;char x=getchar();bool f=;
while((x<''||x>'')&&x!='-')x=getchar();
if(x=='-')x=getchar(),f=;
while(x>=''&&x<='')a=a*+x-,x=getchar();
return f?-a:a;
}
il bool cmp(data a,data b){return pos[a.l]==pos[b.l]?a.r<b.r:a.l<b.l;}
il void add(int p){tot+=num[k^a[p]],++num[a[p]];}
il void del(int p){--num[a[p]],tot-=num[k^a[p]];}
int main()
{
n=gi(),m=gi(),k=gi();
int s=int(sqrt(n));
for(int i=;i<=n;i++)pos[i]=(i-)/s+,a[i]=a[i-]^gi();
for(int i=;i<=m;i++)t[i].l=gi()-,t[i].r=gi(),t[i].id=i;
sort(t+,t+m+,cmp);
for(int i=,l=,r=;i<=m;i++){
while(t[i].l>l)del(l++);
while(t[i].l<l)add(--l);
while(t[i].r<r)del(r--);
while(t[i].r>r)add(++r);
ans[t[i].id]=tot;
}
for(int i=;i<=m;i++)printf("%d\n",ans[i]);
return ;
}

P4462 [CQOI2018]异或序列的更多相关文章

  1. 【luogu P4462 [CQOI2018]异或序列】 题解

    题目链接:https://www.luogu.org/problemnew/show/P4462 ax+ax-1+...+ay = cntx+cnty 这样把一段序列变成两段相加跑莫队. #inclu ...

  2. 并不对劲的复健训练-bzoj5301:loj2534:p4462 [CQOI2018]异或序列

    题目大意 给出一个序列\(a_1,...,a_n\)(\(a,n\leq 10^5\)),一个数\(k\)(\(k\leq 10^5\)),\(m\)(\(m\leq10^5\))次询问,每次询问给\ ...

  3. 洛谷P4462 [CQOI2018]异或序列(莫队)

    题意 题目链接 Sol 一开始以为K每次都是给出的想了半天不会做. 然而发现读错题了维护个前缀异或和然后直接莫队搞就行,. #include<bits/stdc++.h> #define ...

  4. Luogu P4462 [CQOI2018]异或序列

    一道稍微要点脑子的莫队题,原来省选也会搬CF原题 首先利用\(xor\)的性质,我们可以搞一个异或前缀和的东西 每一次插入一个数,考虑它和之前已经加入的数能产生多少贡献 记一下之前的异或总值,然后还是 ...

  5. 洛谷P4462 [CQOI2018]异或序列(莫队)

    打广告->[这里](https://www.cnblogs.com/bztMinamoto/p/9538115.html) 我蠢了…… 如果$a_{l} xor ...a_{r}=k$,那么只要 ...

  6. luogu P4462 [CQOI2018]异或序列 |莫队

    题目描述 已知一个长度为n的整数数列a1,a2,...,an,给定查询参数l.r,问在al,al+1,...,ar​区间内,有多少子序列满足异或和等于k.也就是说,对于所有的x,y (I ≤ x ≤ ...

  7. P4462 [CQOI2018]异或序列 莫队

    题意:给定数列 \(a\) 和 \(k\) ,询问区间 \([l,r]\) 中有多少子区间满足异或和为 \(k\). 莫队.我们可以记录前缀异或值 \(a_i\),修改时,贡献为 \(c[a_i\bi ...

  8. bzoj 5301: [Cqoi2018]异或序列 (莫队算法)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=5301 题面; 5301: [Cqoi2018]异或序列 Time Limit: 10 Sec ...

  9. 「luogu4462」[CQOI2018] 异或序列

    「luogu4462」[CQOI2018]异或序列 一句话题意 输入 \(n\) 个数,给定\(k\),共 \(m\) 组询问,输出第 \(i\) 组询问 \(l_i\) \(r_i\) 中有多少个连 ...

随机推荐

  1. 谈谈toLocaleString()

    如何理解toLocaleString()? toLocaleString()就是把数组转换为本地字符串.首先调用每个数组元素的toLocaleString()方法,然后使用地区特定的分隔符把生成的字符 ...

  2. 几种常用的git命令

    1.合并代码出现冲突,用git status 查看冲突所在的文件 2. clone 指定分支分支的文件夹 git clone -b **** ***; 3.git merge 和 git rebase ...

  3. Apache Maven(三):POM

    什么是 POM? POM (Project Object Model) 项目对象模型.它是一个XML文件,其中包含有关Maven用于构建项目的项目和配置细节的信息.它包含大多数项目的默认值.例如,构建 ...

  4. PyCharm+QT Designer整合

    CMD下使用pip安装PyQt4或者PYQT5 这里要注意,你下载的PYQT5不包含QT designer 还要:pip3 install PyQt5-tools,好像Pyqt5中将designer分 ...

  5. spring-运行时值注入

    在项目中经常使用连接数据库的配置,如下所示 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDa ...

  6. sublime3常用插件总结

    本人之前使用的是webstorm,后来改用sublime,渐渐的爱上了它的快!(自行体会) 正式介绍sublime3常用的一些插件,安装流程不再赘述! SublimeTmpl 创建常用文件初始模板,必 ...

  7. PHP 十问

    1.为了保证精度,Mysql中存钱数的字段用什么类型?PHP怎么处理浮点数精度 decimal数据类型来存储钱: 浮点数的精度有限.尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由 ...

  8. 记6种php 加密解密方法

    <?php function encryptDecrypt($key, $string, $decrypt){ if($decrypt){ $decrypted = rtrim(mcrypt_d ...

  9. Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000

    启动程序报错: Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000006fff80000, 28636 ...

  10. Windows使用Node.js自动生成Vue.js模版环境部署步骤-----记录

    node.js官网下载并安装node 进入node文档目录下,运行cmd 输入 node -v 查看node版本 出现表示安装完成 输入 npm -v 显示npm版本信息 安装cnpm 输入 npm ...