社区讨论
已过hack,但是0分,求调
P4462[CQOI2018] 异或序列参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhj2tzu8
- 此快照首次捕获于
- 2025/11/03 19:48 4 个月前
- 此快照最后确认于
- 2025/11/03 19:48 4 个月前
CPP
#include<bits/stdc++.h>
#define N 200086
#define int long long
using namespace std;
int n,m,k,cnt,ans[N],fk,used[N],a[N];
struct node{
int l,r,id;
bool operator<(const node& x) const{
if(l/fk!=x.l/fk) return l<x.l;
else if((l/fk)%2) return r<x.r;
return r>x.r;
}
}p[N];
void add(int pos);
void del(int pos);
void debug_out(int x);
signed main(){
// ios::sync_with_stdio(0);
// cin.tie(0);cout.tie(0);
cin>>n>>m>>k;
fk=sqrt(n);
// fk=pow(n,2.0/3);
for(int i=1;i<=n;i++){
cin>>a[i];
a[i]^=a[i-1];
}
for(int i=1;i<=m;i++){
cin>>p[i].l>>p[i].r;
p[i].id=i;
p[i].l--;
}
sort(p+1,p+1+m);
used[0]=1;
for(int i=1;i<=m;i++){
int l=p[i].l;
int r=p[i].r;
int id=p[i].id;
if(p[i-1].l<=l) for(int j=p[i-1].l;j<l;j++) del(j);
else for(int j=l;j<=p[i-1].l;j++) add(j);
if(p[i-1].r<=r) for(int j=p[i-1].r+1;j<=r;j++) add(j);
else for(int j=r+1;j<=p[i-1].r;j++) del(j);
ans[id]=cnt;
}
for(int i=1;i<=m;i++) cout<<ans[i]<<endl;
return 0;
}
void add(int pos){
cnt+=used[a[pos]^k];
used[a[pos]]++;
}
void del(int pos){
used[a[pos]]--;
cnt-=used[a[pos]^k];
}
void debug_out(int x){
cout<<"============"<<x<<"============"<<endl;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...