原来我直接学的是假的莫队

原题:

Bob has a favorite number k and ai of length n. Now he asks you to answer m queries. Each query is given by a pair li and ri and asks you to count the number of pairs of integers i and j, such that l ≤ i ≤ j ≤ r and the xor of the numbers ai, ai + 1, ..., aj is equal to k.

1 ≤ n, m ≤ 100 000, 0 ≤ k ≤ 1 000 000, 0 ≤ ai ≤ 1 000 000

题意:

给定一个数列a[i],你可以通过异或前缀和求出s[i],每次求出[l-1,r]内s[i] xor s[j]=k的(i,j)的对数

模板题,先分块,左端点所在块为第一关键字,右端点为第二关键字排序

然后记录一个l和r,每次直接暴力让l和r走到查询的两端点即可

我之前一直以为块间跳转是当两端点中间有一个或多个块的时候加上中间的块的值

经过jjh和sqy大神的指点才知道原来分块就是指排序的时候分块,处理的时候暴力走就可以了

我学了假的分块

有一些细节需要注意,首先所有的操作都是建立在异或前缀和上的所以输入的时候要搞前缀和,而且算答案的时候l要-1

一般n<1e5求数对的个数一般会爆int,要注意longlong

代码:

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
#define ll long long
int rd(){int z=,mk=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mk=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mk;
}
struct dcd{int x,y,id;}b[];
int n,m,k,a[];
int blck;
ll cnt[],ans[];
ll bwl=;
inline void ist(int x){ bwl+=cnt[a[x]^k],++cnt[a[x]];}
inline void dlt(int x){ --cnt[a[x]],bwl-=cnt[a[x]^k];}
bool cmp(dcd x,dcd y){ return(x.x/blck==y.x/blck)?(x.y<y.y):(x.x/blck<y.x/blck);}
int main(){//freopen("ddd.in","r",stdin);
cin>>n>>m>>k; blck=(int)sqrt(n*1.0);
for(int i=;i<=n;++i) a[i]=rd(),a[i]^=a[i-];
for(int i=;i<=m;++i) b[i].x=rd(),b[i].y=rd(),b[i].id=i;
sort(b+,b+m+,cmp);
int l=,r=; cnt[]=;
for(int i=;i<=m;++i){
while(l<b[i].x) dlt(l-),++l;
while(l>b[i].x) l--,ist(l-);
while(r<b[i].y) ist(++r);
while(r>b[i].y) dlt(r--);
ans[b[i].id]=bwl;
}
for(int i=;i<=m;++i) printf("%I64d\n",ans[i]);
return ;
}

最新文章

  1. 原生node的header
  2. 转:无法向会话状态服务器发出会话状态请求请。确保 ASP.NET State Service (ASP.NET 状态服务)已启动
  3. POJ 1971 统计平行四边形 HASH
  4. ahjesus mongodb指定到数据盘连接不上的解决方案
  5. xcode 出现the file couldn&#39;t be opened 怎么解决
  6. Html5新标签解释及用法
  7. C#-创建自定义双击事件
  8. 关于entity framework
  9. POJ 1734.Sightseeing trip (Floyd 最小环)
  10. List&lt;T&gt; 和DataTable的相互转换
  11. jquery第六期:位置选择器
  12. vscode 开发.net core 从安装到部署 教程详解
  13. Dell服务器U盘安装Windows Server时识别不到硬盘
  14. Java虚拟机详解----JVM内存结构
  15. linux命令应用之一
  16. ms sql 导出单个表数据
  17. CentOS ISO版本区别
  18. 给 Windows 文件菜单添加 &quot;用XX程序打开&quot; &quot;用XX编辑&quot; &quot;用XX运行&quot;
  19. 从用户浏览器输入url到用户看到页面结果的过程,发生了什么事情?
  20. 关于Java的一些NIO框架的一点想法

热门文章

  1. Elections CodeForces - 1020C (贪心)
  2. 牛客网暑期ACM多校训练营(第一场)I Substring
  3. Android studio的 repositories配置多个url
  4. ORACLE中使用DBMS_SQL获取动态SQL执行结果中的列名和值
  5. javaScript 删除确认实现方法小结
  6. linux和window是文件挂载
  7. Vysor安装
  8. linux processes
  9. JS之Fetch
  10. bzoj3065