CF 617E
题目链接:
http://codeforces.com/problemset/problem/617/E
题意:
问[L,R]区间内,有多少个子区间,它们里元素的异或和为k。
思路:
莫队算法。
发现自己对于这个算法理解还是不到位。主要是下标问题。如本题,处理完pre数组后,pre数组表示XOR(a[1]^a[2]…a[i]),所以更新的时候更新左区间需要更新pre[i-1],当然这是看了别人代码才知道的。
源码:

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
#define LL long long
const int MAXN = 100000 + 5;
int pos[MAXN], blocksize;
struct Q
{int l, r;int id;
}q[MAXN * 10];
bool cmp(Q a, Q b){if(pos[a.l] == pos[b.l]) return a.r < b.r; return a.l < b.l;}
LL res[MAXN * 10];
int a[MAXN], pre[MAXN];
LL cnt[MAXN * 40];
int n, m, k;
void update(int u, int v, LL &ans)
{
//    printf("v = %d\n", v);
//    printf("ans1 = %I64d, ", ans);if(v == 1){ans += cnt[k^u];cnt[u]++;}else{cnt[u]--;ans -= cnt[k^u];}
//    printf("u = %d\n", u);
//    for(int i = 0 ; i <= 1 ; i++) printf("%I64d ", cnt[i]);
//    printf("\n");
//    printf("ans2 = %I64d, cnt[%d] = %I64d, cnt[%d] = %I64d\n", ans, u, cnt[u], u ^ k, cnt[u ^ k]);
//    system("pause");
}
int main()
{while(scanf("%d%d%d", &n, &m, &k) != EOF){blocksize = sqrt(1.0 * n);for(int i = 1 ; i <= n ; i++){scanf("%d", &a[i]);pre[i] = pre[i - 1] ^ a[i];pos[i] = (i - 1) / blocksize;}memset(cnt, 0, sizeof(cnt));cnt[0] = 1;for(int i = 0 ; i < m ; i++)scanf("%d%d", &q[i].l, &q[i].r), q[i].id = i;sort(q, q + m, cmp);int curr = 0, curl = 1;LL ans = 0;for(int i = 0 ; i < m ; i++){for(int j = curr + 1; j <= q[i].r ; j++) update(pre[j], 1, ans);
//            printf("ans = %I64d\n", ans);for(int j = curr; j > q[i].r ; j--) update(pre[j], -1, ans);
//            printf("ans = %I64d\n", ans);for(int j = curl ; j < q[i].l ; j++) update(pre[j - 1], -1, ans);
//            printf("ans = %I64d\n", ans);for(int j = curl - 1 ; j >= q[i].l ; j--) update(pre[j - 1], 1, ans);
//            printf("ans = %I64d\n", ans);curl = q[i].l, curr = q[i].r;
//            printf("i = %d, cur = %d, r = %d, ans = %I64d, q[i].id = %d\n", i, q[i].l, q[i].r, ans, q[i].id);res[q[i].id] = ans;
//            for(int j = 0 ; j <= 1 ; j++) printf("%I64d ", cnt[j]); printf("\n");
//            system("pause");}for(int i = 0 ; i < m ; i++) printf("%I64d\n", res[i]);}return 0;
}

CF 617E 莫队相关推荐

  1. 【打CF,学算法——四星级】CodeForces 86D Powerful array (莫队算法)

    [CF简介] 题目链接:CF 86D 题面: D. Powerful array time limit per test 5 seconds memory limit per test 256 meg ...

  2. 莫队 ---- CF 135D. Jeff and Removing Periods (等差数列预处理 + 莫队)

    题目 题目大意: 给你一个等差序列,每次查询一段区间[l,r][l,r][l,r]的答案. 显然这是典型的不带修改的区间询问类问题,我们可以考虑用莫队算法去解决. 解题思路: 接下来看怎么递推[l,r ...

  3. cf D. Powerful array 莫队算法

    D. Powerful array 题意:给定一个序列>>每次查询一个区间>>查询该区间内 出现过的数字*出现的次数的平方 的和 思路:学习莫队的第一题或者说小z的袜子是第一题 ...

  4. CodeForces - 617E XOR and Favorite Number(莫队)

    题目链接:点击查看 题目大意:给出一个由n个数组成的数列,现在给出m组询问,每次询问包含一个l和一个r,要求回答在闭区间[l,r]中有多少组(i,j)满足[i,j]闭区间内的所有数的异或和等于k 题目 ...

  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 莫队

    https://vjudge.net/problem/CodeForces-617E 题目大意:给nnn个数,mmm个询问,以及一个数kkk,每次询问要输出[l,r][l,r][l,r]内满足a[i] ...

  7. CodeForces -617E XOR and Favorite Number(莫队)

    题目链接:点击这里 题目大意: 给定一个长度为 nnn 的序列 a1,a2,...,ana_1,a_2,...,a_na1​,a2​,...,an​ ,再给出一个数字 kkk , mmm 组询问每组询 ...

  8. 【CF 617E】 XOR and Favorite Number (Mo's algorithm)

    [CF 617E]  XOR and Favorite Number (Mo's algorithm) E. XOR and Favorite Number time limit per test 4 ...

  9. CodeForces 86 D Powerful array 莫队

    Powerful array 题意:求区间[l, r] 内的数的出现次数的平方 * 该数字. 题解:莫队离线操作, 然后加减位置的时候直接修改答案就好了. 这个题目中发现了一个很神奇的事情,本来数组开 ...

最新文章

  1. C语言中缺少link文件,如何在link文件中给某个C文件的bss分配单独的段?
  2. 数据挖掘与机器学习介绍
  3. linux wine 中文乱码,Linux下使用Wine出现中文乱码的解决方法
  4. 软考计算机网络原理之IP计算问题汇总
  5. 仿百度文库方案[openoffice.org 3+swftools+flexpaper](八) 之 常见问题集FAQ
  6. P4552-[Poetize6]IncDec Sequence【差分】
  7. Linux下添加服务
  8. C++ shared_ptr make_shared是什么意思
  9. 教室录播系统方案_学校教室录播系统解决方案
  10. 大数据查询平台有哪些?Hadoop数据查询组件分析
  11. 20220520数据结构绿皮书读书笔记
  12. 在中关村创业大街Binggo这半年
  13. 雷电模拟器修改本地IP
  14. 【期货交易】期货持仓量浅析,持仓是什么?
  15. vue3.0+vite+ts使用swiper如何掉用autoplay
  16. AI 边缘计算平台 - BeagleBone AI 64 简介
  17. 第06篇 部署区块链浏览器(1)
  18. 先有史记还是先有资治通鉴?司马迁、司马光和司马懿三人什么关系?
  19. mongodb查询文档
  20. 2020 年编程语言盘点展望:Java 老兵不死,Kotlin 蓄势待发

热门文章

  1. 基于微信小程序的车位预约设计与实现--毕业论文
  2. 初中数学几何问题知识思维导图汇总版
  3. python经典面试题100例 面试宝典
  4. DDR3 基础知识分享
  5. repo仓库管理工具介绍
  6. 微信小程序之登录态的探索
  7. 云师大的计算机师范专业好吗,云南除了云南师范大学,还有这些实力不错的师范学校...
  8. 计算机网络:数据链路层:有线和无线网络(4)
  9. 杰克马,请问有钱就是好人吗?
  10. 智通财经:2018年6月23日37个问答了解舜宇光学最新近况