http://codeforces.com/contest/617/problem/E

题意:给出q个查询,每次询问区间内连续异或值为k的有几种情况。

思路:没有区间修改,而且扩展端点,减小端点在前缀和的处理下都是O(n)的,使用莫队算法,每次移动区间时,注意计数是否先减.

  1. /** @Date : 2016-12-09-19.31
  2. * @Author : Lweleth (SoungEarlf@gmail.com)
  3. * @Link : https://github.com/
  4. * @Version :
  5. */
  6. #include<bits/stdc++.h>
  7. #define LL long long
  8. #define PII pair
  9. #define MP(x, y) make_pair((x),(y))
  10. #define fi first
  11. #define se second
  12. #define PB(x) push_back((x))
  13. #define MMG(x) memset((x), -1,sizeof(x))
  14. #define MMF(x) memset((x),0,sizeof(x))
  15. #define MMI(x) memset((x), INF, sizeof(x))
  16. using namespace std;
  17.  
  18. const int INF = 0x3f3f3f3f;
  19. const int N = 1e5+20;
  20. const double eps = 1e-8;
  21.  
  22. struct sion
  23. {
  24. int l, r;
  25. int id;
  26. }s[N];
  27.  
  28. LL a[N];
  29. LL cnt[N*100];
  30. int blc[N];
  31. LL res[N];
  32.  
  33. int cmp(sion a, sion b)
  34. {
  35. if(blc[a.l] == blc[b.l])
  36. return a.r < b.r;
  37. return a.l < b.l;
  38. }
  39.  
  40. int main()
  41. {
  42. int n, q, k;
  43. cin >> n >> q >> k;
  44. a[0] = 0;
  45. for(int i = 1; i <= n; i++)
  46. {
  47. scanf("%lld", a + i);
  48. a[i] = a[i] ^ a[i-1];
  49. }
  50. int dlt = sqrt(n);
  51. for(int i = 1; i <= n; i++)
  52. {
  53. blc[i] = (i - 1)/dlt + 1;
  54. }
  55.  
  56. for(int i = 1; i <= q; i++)
  57. {
  58. scanf("%d%d", &s[i].l, &s[i].r);
  59. s[i].id = i;
  60. }
  61. sort(s + 1, s + 1 + q, cmp);
  62. MMF(cnt);
  63. cnt[0] = 1;
  64. LL ans = 0;
  65. int l = 0, r = 0;//前缀和的关系l初始为0
  66. for(int i = 1; i <= q; i++)
  67. {
  68. while(l > s[i].l - 1)//一定要注意边界问题
  69. l--, ans += cnt[k ^ a[l]], cnt[a[l]]++;//扩增区间先增加下标
  70. while(r < s[i].r)
  71. r++, ans += cnt[k ^ a[r]], cnt[a[r]]++;
  72. while(l < s[i].l - 1)
  73. cnt[a[l]]--,ans -= cnt[k ^ a[l]], l++;//缩小区间,由于前缀和的关系,先计数减1
  74. while(r > s[i].r)
  75. cnt[a[r]]--,ans -= cnt[k ^ a[r]] , r--;
  76. res[s[i].id] = ans;
  77.  
  78. }
  79. for(int i = 1; i <= q; i++)
  80. printf("%lld\n", res[i]);
  81. return 0;
  82. }

Codeforces 617E XOR and Favorite Number莫队的更多相关文章

  1. CodeForces - 617E XOR and Favorite Number 莫队算法

    https://vjudge.net/problem/CodeForces-617E 题意,给你n个数ax,m个询问Ly,Ry,  问LR内有几对i,j,使得ai^...^ aj =k. 题解:第一道 ...

  2. codeforces 617E. XOR and Favorite Number 莫队

    题目链接 给n个数, m个询问, 每次询问问你[l, r]区间内有多少对(i, j), 使得a[i]^a[i+1]^......^a[j]结果为k. 维护一个前缀异或值就可以了. 要注意的是 区间[l ...

  3. CODEFORCES 340 XOR and Favorite Number 莫队模板题

    原来我直接学的是假的莫队 原题: Bob has a favorite number k and ai of length n. Now he asks you to answer m queries ...

  4. codeforces 617E E. XOR and Favorite Number(莫队算法)

    题目链接: E. XOR and Favorite Number time limit per test 4 seconds memory limit per test 256 megabytes i ...

  5. CodeForces - 617E XOR and Favorite Number (莫队+前缀和)

    Bob has a favorite number k and ai of length n. Now he asks you to answer m queries. Each query is g ...

  6. Codeforces 617E XOR and Favorite Number(莫队算法)

    题目大概说给一个序列,多次询问区间异或和为k的连续子序列有多少个. 莫队算法,利用异或的性质,通过前缀和求区间和,先处理出序列各个前缀和,然后每次区间转移时维护i以及i-1前缀和为某数的个数并增加或减 ...

  7. XOR and Favorite Number CodeForces - 617E(前缀异或+莫队)

    题意原文地址:https://blog.csdn.net/chenzhenyu123456/article/details/50574169 题意:有n个数和m次查询,每次查询区间[l, r]问满足a ...

  8. Codeforces Round #340 (Div. 2) E. XOR and Favorite Number 莫队算法

    E. XOR and Favorite Number 题目连接: http://www.codeforces.com/contest/617/problem/E Descriptionww.co Bo ...

  9. Codeforces Round #340 (Div. 2) E. XOR and Favorite Number —— 莫队算法

    题目链接:http://codeforces.com/problemset/problem/617/E E. XOR and Favorite Number time limit per test 4 ...

随机推荐

  1. unity像素贪吃蛇

    [ 星 辰 · 别 礼 ] 设计过程: 首先,在之前玩坏控制台做的那个c#贪吃蛇之后,我以为做unity会很简单,但事实比较不如人意...拖了好几天.因为过程中遇到一些问题 蛇身的移动,还是用列表,将 ...

  2. java中对象和对象的引用

    1.何谓对象? 在Java中有一句比较流行的话,叫做“万物皆对象”,这是Java语言设计之初的理念之一.要理解什么是对象,需要跟类一起结合起来理解.下面这段话引自<Java编程思想>中的一 ...

  3. LintCode-165.合并两个排序链表

    合并两个排序链表 将两个排序链表合并为一个新的排序链表 样例 给出 1->3->8->11->15->null,2->null, 返回 1->2->3- ...

  4. PAT L1-048 矩阵A乘以B

    https://pintia.cn/problem-sets/994805046380707840/problems/994805082313310208 给定两个矩阵A和B,要求你计算它们的乘积矩阵 ...

  5. 基于gulp的前端自动化开发构建新

    关于gulp的使用,已经在之前写过一篇文章,但是遗留了一个问题.问题是实现文件的增量式更新,就是给html引入的js和css文件打上标记.每次更新标记更新. 上篇文章想通过开发同时实现标记的实时更新, ...

  6. 【Linux】- CentOS安装Mysql 5.7

    CentOS7默认数据库是mariadb,而不是mysql.CentOS7的yum源中默认是没有mysql的.所以不能使用yum install直接安装. 下载mysql的repo源 cd /usr/ ...

  7. Activiti5工作流笔记二

    流程变量 import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import org.activiti ...

  8. 客户端 new socket时候 就像服务端发起连接了

    客户端 new socket时候  就像服务端发起连接了

  9. 【bzoj2190】[SDOI2008]仪仗队 欧拉函数

    题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...

  10. asp.net AES加密跟PHP的一致,将加密的2进制byte[]转换为16进制byte[] 的字符串获得

    <?php class AESUtil { public static function encrypt($input, $key) { $size = mcrypt_get_block_siz ...