一道稍微要点脑子的莫队题,原来省选也会搬CF原题

首先利用\(xor\)的性质,我们可以搞一个异或前缀和的东西

每一次插入一个数,考虑它和之前已经加入的数能产生多少贡献

记一下之前的异或总值,然后还是利用异或的性质再异或一遍

这个我们再开一个数组统计一下前缀亦或值的出现次数

但是唯一要注意的就是一些细节问题,尤其是左端点加入(or删除)的时候要减一(搞前缀和的时候左端点肯定要减一的么)

然后就可以水过了(我的代码莫队的时候写的有点骚)

CODE

  1. #include<cstdio>
  2. #include<cctype>
  3. #include<cmath>
  4. #include<algorithm>
  5. using namespace std;
  6. const int N=100005;
  7. struct data
  8. {
  9. int l,r,id; long long ans;
  10. }q[N];
  11. int a[N],n,m,k,size,tot,blk[N],L,R,sum[N],cnt[N<<1]={1};
  12. long long res;
  13. inline char tc(void)
  14. {
  15. static char fl[100000],*A=fl,*B=fl;
  16. return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
  17. }
  18. inline void read(int &x)
  19. {
  20. x=0; char ch; while (!isdigit(ch=tc()));
  21. while (x=(x<<3)+(x<<1)+ch-'0',isdigit(ch=tc()));
  22. }
  23. inline void write(int x)
  24. {
  25. if (x>9) write(x/10);
  26. putchar(x%10+'0');
  27. }
  28. inline bool cmp1(data a,data b)
  29. {
  30. return blk[a.l]<blk[b.l]||(blk[a.l]==blk[b.l]&&(blk[a.l]&1?a.r<b.r:a.r>b.r));
  31. }
  32. inline bool cmp2(data a,data b)
  33. {
  34. return a.id<b.id;
  35. }
  36. inline void add(int x)
  37. {
  38. res+=cnt[k^sum[x]]; ++cnt[sum[x]];
  39. }
  40. inline void del(int x)
  41. {
  42. --cnt[sum[x]]; res-=cnt[k^sum[x]];
  43. }
  44. int main()
  45. {
  46. //freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
  47. register int i; read(n); read(m); read(k); size=sqrt(n);
  48. for (i=1;i<=n;++i) read(a[i]),blk[i]=(i-1)/size+1,sum[i]=sum[i-1]^a[i];
  49. for (i=1;i<=m;++i) read(q[i].l),read(q[i].r),q[i].id=i;
  50. sort(q+1,q+m+1,cmp1); L=1; R=0;
  51. for (i=1;i<=m;++i)
  52. {
  53. while (L>q[i].l) add(--L-1); while (L<q[i].l) del(-1+L++);
  54. while (R<q[i].r) add(++R); while (R>q[i].r) del(R--);
  55. q[i].ans=res;
  56. }
  57. for (sort(q+1,q+m+1,cmp2),i=1;i<=m;++i) write(q[i].ans),putchar('\n');
  58. return 0;
  59. }

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

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

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

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

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

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

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

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

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

  5. P4462 [CQOI2018]异或序列

    题目描述 已知一个长度为n的整数数列 a1,a2,...,ana_1,a_2,...,a_na1​,a2​,...,an​ ,给定查询参数l.r,问在 al,al+1,...,ara_l,a_{l+1 ...

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

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

  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. Java:匿名类,匿名内部类

    本文内容: 内部类 匿名类 首发日期 :2018-03-25 内部类: 在一个类中定义另一个类,这样定义的类称为内部类.[包含内部类的类可以称为内部类的外部类] 如果想要通过一个类来使用另一个类,可以 ...

  2. 编码最佳实践——Liskov替换原则

    Liskov替换原则(Liskov Substitution Principle)是一组用于创建继承层次结构的指导原则.按照Liskov替换原则创建的继承层次结构中,客户端代码能够放心的使用它的任意类 ...

  3. 前端测试框架jest 简介

    转自: https://www.cnblogs.com/Wolfmanlq/p/8012847.html 作者:Ken Wang 出处:http://www.cnblogs.com/Wolfmanlq ...

  4. GridSearchCV交叉验证

    代码实现(基于逻辑回归算法): # -*- coding: utf-8 -*- """ Created on Sat Sep 1 11:54:48 2018 @autho ...

  5. Linux regulator framework(1) - 概述【转】

    转自蜗窝科技:http://www.wowotech.net/pm_subsystem/regulator_framework_overview.html 1. 前言 Regulator,中文名翻译为 ...

  6. Centos 下添加开机自启动服务和脚本

    最近刚玩Centos7的系统,跟Centos6还是很多方面有改变的,这里记录一下怎么在Centos7下添加开机自启动脚本和服务的方法. 1.添加开机自启服务 我这里以docker 服务为例,设置如下两 ...

  7. Python作业第一课

    零基础开始学习,最近周边的同学们都在学习,我也来试试,嘿嘿,都写下来,下次不记得了还能来看看~~ Python作业第一课1)登陆,三次输入锁定,下次不允许登陆2)设计一个三级菜单,菜单内容可自行定义, ...

  8. 一步步教你上架iOS APP

    注意,注意,注意:一定要设置Enable Xombie Objects为不勾选.在Edit Scheme中有一个Run,然后选择Diagnostics,然后取消勾选Enable Zombie Obje ...

  9. 使用requests模块保存网络上的图片

    import requests url = 'https://www.baidu.com/img/bd_logo1.png' r = requests.get(url=url) with open(' ...

  10. hadoop系列 第一坑: hdfs JournalNode Sync Status

    今天早上来公司发现cloudera manager出现了hdfs的警告,如下图: 解决的思路是: 1.首先解决简单的问题,查看警告提示的设置的阀值时多少,这样就可以快速定位到问题在哪了,果然Journ ...