WA#7
查看原帖
WA#7
380950
2020wty楼主2023/11/9 08:47
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define re register int
#define il inline
using namespace std;
const int N=1e6+10;
struct Node{
	int l,r,id;
}qj[N/10];
int a[N/10],n,m,L=1,R,pos[N/10],k;
long long cnt[N],ans[N],res;
il bool cmp(Node a,Node b){
	if(pos[a.l]!=pos[b.l])return pos[a.l]<pos[b.l];
	if(pos[a.l]%2==0)return a.r<b.r;
	return a.r>b.r;
}
il void Add(int x){
	res+=cnt[k^a[x]];
	cnt[a[x]]++;
}
il void Del(int x){
	cnt[a[x]]--;
	res-=cnt[k^a[x]];
}
int main(){
	scanf("%d%d%d",&n,&m,&k);
	int g=sqrt(n);
	for(re i=1;i<=n;i++){
		scanf("%d",&a[i]);
		a[i]^=a[i-1];
		pos[i]=i/g;
	}
	for(re i=1;i<=m;i++){
		scanf("%d%d",&qj[i].l,&qj[i].r);
		qj[i].l--;
		qj[i].id=i;
	}
	sort(qj+1,qj+m+1,cmp);
//	cnt[0]=1;
	for(re i=1;i<=m;i++){
		while(L>qj[i].l)Add(--L);
		while(R<qj[i].r)Add(++R);
		while(L<qj[i].l)Del(L++);
		while(R>qj[i].r)Del(R--);
		ans[qj[i].id]=res;
	}
	for(re i=1;i<=m;i++)printf("%lld\n",ans[i]);
	return 0;
}

明明另一道一模一样的题可以过(

2023/11/9 08:47
加载中...