题目链接


Solution

有点巧的莫队.

考虑到区间 \([L,R]\) 的异或和也即 \(sum[L-1]~\bigoplus~sum[R]\) ,此处\(sum\)即为异或前缀和.

然后如何考虑异或和为 \(k\) ?

我们做完前缀和后,可以发现对于\(sum[i]\)这个起点,异或上\(k\bigoplus{sum[i]}\)则可以异或成\(k\).

且由于 \(k\leq{100000}\) ,所以可以开一个数组记录每一个异或值的出现次数.

然后就可以 \(O(1)\) 修改了,套个莫队即可.

Code

#include<bits/stdc++.h>
#define N 100001
#define in(x) x=read()
#define del(x) js[a[x]]--;ans-=js[a[x]^k];
#define add(x) ans+=js[a[x]^k];js[a[x]]++;
using namespace std; struct sj{int l,r,id;}q[N];
int js[N],pos[N],Ans[N],a[N],n,m,k;
int L,R,ans,sz;
int read()
{
char ch=getchar();int f=1,w=0;
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){w=w*10+ch-'0';ch=getchar();}
return f*w;
} bool cmp(sj x,sj y)
{
if(pos[x.l]==pos[y.l])return pos[x.r]<pos[y.r];
return pos[x.l]<pos[y.l];
} int main()
{
in(n),in(m),in(k); sz=sqrt(n);
for(int i=1;i<=n;i++)
{int x; in(x); a[i]=a[i-1]^x;pos[i]=i/*/sz*/;}
for(int i=1;i<=m;i++)
in(q[i].l),in(q[i].r),q[i].id=i;
sort(q+1,q+m+1,cmp);
js[0]=1; ans=0; L=1;
for(int i=1;i<=m;i++)
{
while(L>q[i].l){L--;add(L-1);}
while(L<q[i].l){del(L-1);L++;}
while(R<q[i].r){R++;add(R);}
while(R>q[i].r){del(R);R--;}
Ans[q[i].id]=ans;
}
for(int i=1;i<=m;i++)
cout<<Ans[i]<<endl;
}

[CQOI2018]异或序列 (莫队,异或前缀和)的更多相关文章

  1. BZOJ5301:[CQOI2018]异或序列(莫队)

    Description 已知一个长度为 n 的整数数列 a[1],a[2],…,a[n] ,给定查询参数 l.r ,问在 [l,r] 区间内,有多少连续子 序列满足异或和等于 k . 也就是说,对于所 ...

  2. bzoj 5301 [Cqoi2018]异或序列 莫队

    5301: [Cqoi2018]异或序列 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 204  Solved: 155[Submit][Status ...

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

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

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

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

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

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

  6. 【CQOI2018】异或序列 - 莫队

    题目描述 已知一个长度为n的整数数列 $a_1,a_2,...,a_n$​,给定查询参数l.r,问在 $a_l,a_{l+1},...,a_r$​ 区间内,有多少子序列满足异或和等于k.也就是说,对于 ...

  7. CQOI2018异或序列 [莫队]

    莫队板子 用于复习 #include <cstdio> #include <cstdlib> #include <algorithm> #include <c ...

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

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

  9. 学习笔记——不带修序列莫队 (luogu2079)小B的询问

    莫队是一种对于询问的离线算法 时间复杂度:O(\(n \sqrt n\)) 大致思想就是 首先将询问离线,然后对原序列分块,使得每一个\(l和r\)都在一个块里 然后按照左节点排序,若所在的块相等,就 ...

随机推荐

  1. Q&A - Nginx是做什么的?tomcat结合Nginx使用小结

    相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了 ...

  2. 高封装的property方法

    class Person(): def __init__(self): self.__age = 0 def set_age(self, age): if age < 0 or age > ...

  3. HTML常用标签用法及实例

    HTML常用标签用法及实例1.<!--1.注释-->2.<!--2.DOCTPYE 声明文档类型-->3.<!--3.a--> <a href="h ...

  4. Android 工具类 异常处理类CrashHandler

    1.整体分析 1.1.源代码如下,可以直接Copy. public class CrashHandler implements Thread.UncaughtExceptionHandler { pr ...

  5. java练习题——字符串

    一.动手动脑之String.equals()方法: 判断s1和s2的内容相同s1.equals(s2). 判断s1和s2的地址相同s1 == s2. 二.整理String类的Length().char ...

  6. tools.jar seem to ....

    android stadio 运行不起来,可以在java_home原来的路径下加一个\, 然后就可以运行起来了.

  7. runloop的mode作用是什么?

    用来控制一些特殊操作只能在指定模式下运行,一般可以通过指定操作的运行mode来控制执行时机,以提高用户体验 系统默认注册了5个Mode kCFRunLoopDefaultMode:App的默认Mode ...

  8. .NET非常棒的开源项目,给你意想不到的东西!

    http://www.cnblogs.com/Leo_wl/p/4560146.html

  9. CocosCreator设置启动场景

    刚开始接触CocosCreator,在调试时,如果有多个场景,不知道如何设置将某个指定的场景设置为启动场景,折腾了一圈,找到了设置的地方, 记录一下.   点击项目->项目设置     在预览运 ...

  10. jsonp、瀑布流布局、组合搜索、多级评论(评论树)、Tornado初识

    1.JSONP原理剖析以及实现 1.1 同源策略限制 用django分别建立两个项目,jsonp01和jsonp02,然后再在这两个项目里分别建立一个app,比如名字叫jsonp1.jsonp2:js ...