社区讨论
WA 玄关 求hack
P4462[CQOI2018] 异或序列参与者 5已保存回复 15
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 15 条
- 当前快照
- 1 份
- 快照标识符
- @mhj2ujya
- 此快照首次捕获于
- 2025/11/03 19:49 4 个月前
- 此快照最后确认于
- 2025/11/03 20:41 4 个月前
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int unit;
struct node{
int l,r,id;
}ask[N];
int n,m,k;
int a[N],sum[N];
bool cmp(node x,node y){
if(x.l/unit!=y.l/unit) return x.l<y.l;
if((x.l/unit)%2==1) return x.r<y.r;
return x.r>y.r;
}
int ans[N],nowl,nowr,tot;
int cnt[N];
void solve(int l,int r,int id){
while(nowl<l){
int c=sum[nowl];
cnt[c]--;
tot-=cnt[c^k];
nowl++;
}
while(nowl>l){
int c=sum[nowl-1];
tot+=cnt[c^k];
cnt[c]++;
nowl--;
}
while(nowr<r){
int c=sum[nowr+1];
tot+=cnt[c^k];
cnt[c]++;
nowr++;
}
while(nowr>r){
int c=sum[nowr];
cnt[c]--;
tot-=cnt[c^k];
nowr--;
}
ans[id]=tot;
return;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m>>k;
unit=sqrt(n);
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) sum[i]=sum[i-1]^a[i];
for(int i=1;i<=m;i++){
cin>>ask[i].l>>ask[i].r;
ask[i].id=i;
}
sort(ask+1,ask+1+m,cmp);
nowl=nowr=0,tot=(k==0?1:0),cnt[0]=1;
for(int i=1;i<=m;i++) solve(ask[i].l-1,ask[i].r,ask[i].id);
for(int i=1;i<=m;i++) cout<<ans[i]<<"\n";
return 0;
}
回复
共 15 条回复,欢迎继续交流。
正在加载回复...