Codeforces 617E XOR and Favorite Number[莫队算法]

题意:给你n个数,再给定m个询问和一个数k,每个询问是一个区间 [ l ,r ]

问这个区间中有多少个i j 满足a[i]^a[i+1]^...^a[j]==k;

刚开始得知是莫队算法,去了解了下这个算法然后开始写,发现还是不知道怎么处理

最后是照着别人代码写的,还看了好久,,最后还是理解了  自己还是弱啊。。(不过对异或和这个算法也更了解了)


#include
using namespace std;
#define N 1000005
struct lx{
	int l,r,id;
}p[N];
int a[N],num[N*2],b[N];
long long ans[N];
int n,m,k,sq;

bool cmp(lx a,lx b){
	if(a.l/sq!=b.l/sq)return a.l/sqright的答案;
		}                            //	 再更新num[b[right]];
		while(right>p[i].r){
			num[b[right]]--;
			cnt-=num[b[right]^k];
			right--;
		}
		while(left>p[i].l-1){
			left--;
			cnt+=num[b[left]^k];
			num[b[left]]++;
		}
		while(left


你可能感兴趣的:(Codeforces)