| 记录编号 |
611454 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
[CQOI2018] 异或序列 |
最终得分 |
100 |
| 用户昵称 |
梦那边的原神 |
是否通过 |
通过 |
| 代码语言 |
C++ |
运行时间 |
1.599 s |
| 提交时间 |
2026-01-30 20:55:56 |
内存使用 |
7.16 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int N=4e5+10;
typedef long long ll;
ll n,m,k,a[N],t,cnt[N],ans,ql,qr,l,r,res[N];
struct node{
ll l,r,idx;
}b[N];
inline void read(ll &x){
char ch=getchar();
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return;
}
inline void write(ll x){
if(x>9)write(x/10);
putchar(x%10+'0');
}
bool cmp(node a,node b){
return (a.l/t)^(b.l/t)?a.l<b.l:((a.l/t)&1?a.r<b.r:a.r>b.r);
}
inline void add(int x){
ans+=cnt[a[x]^k];
cnt[a[x]]++;
}
inline void del(int x){
cnt[a[x]]--;
ans-=cnt[a[x]^k];
}
int main(){
freopen("xorseq.in","r",stdin);
freopen("xorseq.out","w",stdout);
read(n),read(m),read(k);t=sqrt(n);
for(int i=1;i<=n;i++)read(a[i]),a[i]^=a[i-1];
for(int i=1;i<=m;i++)read(b[i].l),read(b[i].r),b[i].l--,b[i].idx=i;
sort(b+1,b+1+m,cmp);
cnt[0]=1;
for(int i=1;i<=m;i++){
ql=b[i].l,qr=b[i].r;
while(l<ql)del(l++);
while(l>ql)add(--l);
while(r<qr)add(++r);
while(r>qr)del(r--);
res[b[i].idx]=ans;
}
for(int i=1;i<=m;i++){
write(res[i]);putchar('\n');
}
return 0;
}