Description

已知一个长度为 n 的整数数列 a[1],a[2],…,a[n] ,给定查询参数 l、r ,问在 [l,r] 区间内,有多少连续子
序列满足异或和等于 k 。
也就是说,对于所有的 x,y (l≤x≤y≤r),能够满足a[x]^a[x+1]^…^a[y]=k的x,y有多少组。

Input

输入文件第一行,为3个整数n,m,k。
第二行为空格分开的n个整数,即ai,a2,….an。
接下来m行,每行两个整数lj,rj,表示一次查询。
1≤n,m≤105,O≤k,ai≤105,1≤lj≤rj≤n

Output

输出文件共m行,对应每个查询的计算结果。

Sample Input

4 5 1
1 2 3 1
1 4
1 3
2 3
2 4
4 4

Sample Output

4
2
1
2
1

Solution

不能再这么颓下去了
昨天打了一天板子感觉现在脑子锈了QAQ……
题意杀了好久……明明子序列应该是不连续的
一看题目这个形式基本莫队没跑了,
然而如果两端加入/减掉一个数,这个数对于区间的影响是靠近它的连续一段
这显然是没法维护的。所以可以维护一个异或前缀和sum
因为a[x] xor a[x+1]……xor a[y-1] xor a[y] 等价于 sum[y] xor sum[x-1]
那么我们就可以用莫队来维护前缀和了。
每次往莫队里加入/删除前缀和的时候只需要考虑有多少个数与当前数异或等于k,开个桶即可。
因为查询区间[x,y]的时候我们需要sum[x-1]~sum[y],所以读入的时候左端点要减一。

Code

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define N (500000+100)
using namespace std; struct node{int x,y,num,id,ans;}ask[N];
int Keg[N],sum[N],n,m,k,x,now; bool cmp1(node a,node b){return a.id==b.id?a.y<b.y:a.id<b.id;}
bool cmp2(node a,node b){return a.num<b.num;} void Ins(int pos){now+=Keg[sum[pos]^k]; Keg[sum[pos]]++;}
void Del(int pos){Keg[sum[pos]]--; now-=Keg[sum[pos]^k];} int main()
{
scanf("%d%d%d",&n,&m,&k);
int unit=sqrt(n);
for (int i=; i<=n; ++i)
scanf("%d",&x),sum[i]=sum[i-]^x;
for (int i=; i<=m; ++i)
{
scanf("%d%d",&ask[i].x,&ask[i].y);
ask[i].x--; ask[i].num=i;
ask[i].id=ask[i].x/unit;
}
sort(ask+,ask+m+,cmp1); int l=,r=;
for (int i=; i<=m; ++i)
{
while (l<ask[i].x) Del(l++);
while (l>ask[i].x) Ins(--l);
while (r<ask[i].y) Ins(++r);
while (r>ask[i].y) Del(r--);
ask[i].ans=now;
} sort(ask+,ask+m+,cmp2);
for (int i=; i<=m; ++i)
printf("%d\n",ask[i].ans);
}

BZOJ5301:[CQOI2018]异或序列(莫队)的更多相关文章

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

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

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

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

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

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

  4. [CQOI2018]异或序列 (莫队,异或前缀和)

    题目链接 Solution 有点巧的莫队. 考虑到区间 \([L,R]\) 的异或和也即 \(sum[L-1]~\bigoplus~sum[R]\) ,此处\(sum\)即为异或前缀和. 然后如何考虑 ...

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

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

  6. CQOI2018异或序列 [莫队]

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

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

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

  8. BZOJ5301: [Cqoi2018]异或序列(莫队)

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

  9. [bzoj5301][Cqoi2018]异或序列_莫队

    异或序列 bzoj-5301 Cqoi-2018 题目大意:题目链接. 注释:略. 想法: 由于a^a=0这个性质,我们将所有的数变成异或前缀和. 所求就变成了求所有的$l_i\le x<y\l ...

随机推荐

  1. Echarts 修改折线的颜色和折线的点的大小方法

    series: [{ type: 'line', smooth:true,//折点是圆弧状的                            showSymbol: true,          ...

  2. WPF简单的数据库查询

    做一个简单WPF连接数据库的 控件类型和名称:DataGrid:dataGrid          Button1  :Button1              Button:   Button2   ...

  3. 001.開始使用ASP.NET Web API 2(一)

    原文鏈接:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web ...

  4. Hadoop实战之四~hadoop作业调度详解(2)

    这篇文章将接着上一篇wordcount的例子,抽象出最简单的过程,一探MapReduce的运算过程中,其系统调度到底是如何运作的. 情况一:数据和运算分开的情况 wordcount这个例子的是hado ...

  5. [编程] C语言变量和数据类型总结练习题

    练习题: 1) 如何用 printf() 输出 short.int.long 类型的整数,请举例说明. 2) 如何用 printf() 输出 float.double 类型的小数,请举例说明. 3) ...

  6. python os.popen 乱码问题

    os.popen('ipconfig') 命令返回的结果在调试时乱码了: output1 = os.popen('ipconfig') o1=output1.read() 我猜这里输出的内容要和控制台 ...

  7. C Primer Plus 读后感

    <C Primer Plus>中文版 第六版 从网站上搜索到这本书适合初学者而且是自学者可以看的C语言书籍,于是上网买了一本. 真是物有所值,通过本书我很系统的学习了一遍C语言,书中代码很 ...

  8. CSS的伪类 :before 和 :after

    CSS 有两个说不上常用的伪类 :before 和 :after,偶尔会被人用来添加些自定义格式什么的,但是它们的功用不仅于此.前几天发现了 Creative Link Effects 这个非常有意思 ...

  9. JavaScript实现邮箱后缀提示功能

    先来个基础的 需求 根据下面需求实现如示意图所示的邮箱输入提示功能,注意,根据要求只需实现下面功能 当用户没有任何输入时,提示框消失 当用户输入字符后,显示提示框,并且把用户输入的内容自动拼上邮箱后缀 ...

  10. mui.ajax()和asp.net sql服务器数据交互【3】最终版

    1.前端页面 <header class="mui-bar mui-bar-nav"> <a class="mui-action-back mui-ic ...