为什么以下代码无法通过:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int sz;
struct nd1{
int l,r,v;
bool operator<(nd1 a){
if(l/sz!=a.l/sz) return l<a.l;
if((l/sz)&1) return r<a.r;
return r>a.r;
}
}q[100010];
int cnt[100010];
ll ans[100010],res;
int n,m,k,a[100010],l,r=-1;
void add(int u){
res+=cnt[u^k];
cnt[u]++;
}
void del(int u){
cnt[u]--;
res-=cnt[u^k];
}
int main(){
scanf("%d%d%d",&n,&m,&k);
sz=sqrt(n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
a[i]^=a[i-1];
}
for(int i=1;i<=m;i++){
scanf("%d%d",&q[i].l,&q[i].r);
q[i].v=i;
q[i].l--;
}
sort(q+1,q+m+1);
for(int i=1;i<=m;i++){
while(l>q[i].l) add(a[--l]);
while(r<q[i].r) add(a[++r]);
while(l<q[i].l) del(a[l++]);
while(r>q[i].r) del(a[r--]);
ans[q[i].v]=res;
}
for(int i=1;i<=m;i++){
printf("%lld\n",ans[i]);
}
}
但我将
void add(int u){
cnt[u]++;
res+=cnt[u^k];
}
void del(int u){
res-=cnt[u^k];
cnt[u]--;
}
改为
void add(int u){
res+=cnt[u^k];
cnt[u]++;
}
void del(int u){
cnt[u]--;
res-=cnt[u^k];
}
后就 AC 了?
有大佬可以讲述一下上面的代码的错误之处吗?