0分求条
查看原帖
0分求条
1423724
dyxcj楼主2025/7/30 21:08
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n,m,a[N],k,b[N],B,nl=1,nr,js[N*2];
long long sum;
struct wasd{
    int l,r,i;
    long long z;
}d[N];
bool cmp(wasd x,wasd y){
    if(x.l/B!=y.l/B)return x.l<y.l;
    return x.r<y.r;
}
bool cmp1(wasd x,wasd y){
    return x.i<y.i;
}
void add(int u){
    sum+=js[b[u]^k];
    js[b[u]^k]++;
}
void del(int u){
    js[b[u]^k]--;
    sum-=js[b[u]^k];
}
int Modui(int l,int r){
    while(nl<l)del(nl++);
    while(nl>l)add(--nl);
    while(nr>r)del(nr--);
    while(nr<r)add(nr++);
    return sum;
}
int main(){
    ios::sync_with_stdio(0);
    cout.tie(0);
    cin.tie(0);
    cin>>n>>m>>k;
    js[0]=1;
    B=sqrt(n);
    for(int i=1;i<=n;i++)cin>>a[i],b[i]=b[i-1]^a[i];
    for(int i=1;i<=m;i++)cin>>d[i].l>>d[i].r,d[i].i=i,d[i].l--;
    sort(d+1,d+1+m,cmp);
    for(int i=1;i<=m;i++)d[i].z=Modui(d[i].l,d[i].r);
    sort(d+1,d+1+m,cmp1);
    for(int i=1;i<=m;i++)cout<<d[i].z<<"\n";
    return 0;
}
2025/7/30 21:08
加载中...