Loj 2534 异或序列

  • 考虑莫队离线处理.每加一个数,直接询问 \(a[x]\oplus k\) 的前/后缀数目即可,减同理.
  • 利用异或的优秀性质,可以维护异或前缀和,容易做到每次 \(O(1)\) 移动区间端点.

很久没写莫队了.有一个小细节开始写错了:如果 \(a.belong\) 是根据 \(a.l\) 算出的,排序时的第二关键字就选取 \(a.r\) ,否则会被卡到 \(O(n^2)\) .

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mp make_pair
#define pii pair<int,int>
inline int read()
{int x=0;bool pos=1;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')pos=0;for(;isdigit(ch);ch=getchar())x=x*10+ch-'0';return pos?x:-x;
}
const int MAXN=1e5+10,N=2e5;
struct query{int l,r,bel;int ans,id;
}q[MAXN];
bool cmp1(query a,query b)
{if(a.bel!=b.bel)return a.bel<b.bel;if(a.r!=b.r)return a.r<b.r;return a.l<b.l;
}
bool cmp2(query a,query b)
{return a.id<b.id;
}
int n,m,k;
int ans=0;
int a[MAXN],pre[MAXN],cnt[MAXN<<1];
void Add(int x)
{ans+=cnt[k^pre[x]]; ++cnt[pre[x]];
}
void Remove(int x)
{--cnt[pre[x]];ans-=cnt[k^pre[x]];
}
int main()
{n=read(),m=read(),k=read();int bsiz=sqrt(n);for(int i=1;i<=n;++i)a[i]=read(),pre[i]=pre[i-1]^a[i];for(int i=1;i<=m;++i){q[i].l=read(),q[i].r=read();q[i].bel=(q[i].l-1)/bsiz;q[i].id=i;}sort(q+1,q+1+m,cmp1);int L=1,R=0;for(int i=1;i<=m;++i){int l=q[i].l,r=q[i].r;while(L<l-1)Remove(L++);while(L>l-1)Add(--L);while(R<r)Add(++R);while(R>r)Remove(R--);q[i].ans=ans;}sort(q+1,q+1+m,cmp2);for(int i=1;i<=m;++i)printf("%d\n",q[i].ans);return 0;
}

转载于:https://www.cnblogs.com/jklover/p/10437478.html

Loj 2534 异或序列相关推荐

  1. [CQOI2018]异或序列

    [CQOI2018]异或序列 题意: 给定1个整数K,离线询问[l,r]中有多少子区间xor和=K. 题解: 异或有个重要的性质:它的逆运算就是自身 我们维护该数列的前缀异或和a[x],表示1到x的区 ...

  2. 6759: 异或序列

    6759: 异或序列 时间限制: 1 Sec  内存限制: 128 MB 题目描述 已知一个长度为n的整数数列a1,a2,-,an,给定查询参数l.r,问在al,al+1,-,ar区间内,有多少子序列 ...

  3. 【LOJ】#2534. 「CQOI2018」异或序列

    题解 每个数都处理成前缀和,就相当于问\([l - 1,r]\)有几个数对\(x,y\),\(sum[x] ^ sum[y] = k\) 直接莫队即可 代码 #include <bits/std ...

  4. luogu4462 异或序列

    题目大意 给出n,m,k,有n个数的序列,m次询问一段区间,问异或和等于K的子区间的个数. 题解 本题一看就是莫队.但要解决该题需要以下性质: 定理: $$a\oplus b=c\Leftrighta ...

  5. [CQOI2018] 异或序列

    题目链接:戳我 哈哈哈我竟然秒切了省选题 莫队+异或. 考虑异或的性质,一个数同时异或两次等于没有进行操作.那么我们设a[i]为前i个数的异或和,显然对于一个区间\([l,now]\),\(a[l-1 ...

  6. [LOJ#10132]异象石

    Description Adera 是 Microsoft 应用商店中的一款解谜游戏. 异象石是进入 Adera 中异时空的引导物,在 Adera 的异时空中有一张地图.这张地图上 有 N 个点,有 ...

  7. BZOJ5301:[CQOI2018]异或序列——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5301 https://www.luogu.org/problemnew/show/P4462 已知 ...

  8. 【Luogu】P4462异或序列(莫队)

    题目链接 观察什么时候x到y之间那一段可以被统计 xorsum[x-1]^xorsum[y]=k xorsum[x-1]=xorsum[y]^k||xorsum[y]=xorsum[x-1]^k 莫队 ...

  9. 洛谷 P4551 最长异或路径

    题目描述 给定一棵 nn 个点的带权树,结点下标从 11 开始到 NN .寻找树中找两个结点,求最长的异或路径. 异或路径指的是指两个结点之间唯一路径上的所有节点权值的异或. 输入输出格式 输入格式: ...

最新文章

  1. (转)jQuery.fn.extend与jQuery.extend到底区别在哪?
  2. Python_地址中左斜线和右斜线的区别——Python系列学习笔记
  3. 【Spring】1、Spring 中的监听器 Listener
  4. 米斯特白帽培训讲义 漏洞篇 SQL 注入
  5. 智商税?苹果1.8米连接线卖949元、3米的1169元被吐槽:高攀不起
  6. 分库分表学习总结(5)——有关分库分表相关面试题总结
  7. protocol buffer的使用
  8. 什么叫小米粒吸尘机器人_mac上的Automator小机器人的有什么妙用?
  9. 远程服务器学习总结篇1:ssh
  10. PS如何删除智能图层为可编辑状态
  11. android自定义listview 显示数组,android TextView控件如何显示Listview数组内容到一个Textview控件上?...
  12. MybatisPlus中@TableField注解的使用详解
  13. 软件架构-zookeeper之curator详解
  14. Java爬虫 爬取英雄联盟英雄的皮肤图片到本地
  15. 闪电连接算法之Python实现
  16. 百度SRE工程师提前批一面总结+为二面攒人品
  17. Ubuntu 22.04 使用私钥登录时提示 server refused our key
  18. 机器学习08:最近邻学习
  19. Codeforces Round #796 (Div. 2)
  20. 专 业 学 习 成 果

热门文章

  1. 三调成果共享服务平台算不算一个伪命题
  2. Java自己动手之选择排序实现
  3. 一文看懂web组态编辑器web可视化组件
  4. 彻底解决ie11浏览网页双击放大的问题,安全无污染!
  5. 趣味java——五子棋游戏
  6. 百度地图坐标转换API
  7. 颜值即正义,献礼就业季,打造多颜色多字体双飞翼布局技术简历模版(Resume)
  8. 五、docker--进程-文件-网络
  9. 连云存储魔力象限都进不了,就别提三年之内中国第一了吧!
  10. 【真人手势动画制作软件】万彩手影大师教程 | 添加动作动画