社区讨论
站外题求助
学术版参与者 3已保存回复 12
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 12 条
- 当前快照
- 1 份
- 快照标识符
- @mdnubhui
- 此快照首次捕获于
- 2025/07/29 09:10 7 个月前
- 此快照最后确认于
- 2025/11/05 00:57 4 个月前
https://www.zhimaoi.cn/org/b3f41b76-6101-444a-9ddf-2aad7ce28b1f/problem/87c98f4b-29f4-495f-9e62-f28c1f2f85de/
使用莫队
CPP#include<bits/stdc++.h>
#define get(x) (((x)-1)/len)
using namespace std;
const int N=2e5+50;
long long a[N],ans[N],f[N],len,l,r;
long long res;
int n,m,k;
struct query{
int l,r,id;
bool operator < (query b){
if(get(l)==get(b.l))return r<b.r;
return get(l)<get(b.l);
}
}q[N];
inline void add(int p){
res+=f[a[p]^k];
f[a[p]]++;
}
inline void del(int p){
f[a[p]]--;
res-=f[a[p]^k];
}
int main(){
//ios::sync_with_stdio(0);
//cin.tie(0);cout.tie(0);
cin>>n>>m>>k;
len=sqrt(n);
for(int i=1;i<=n;i++)cin>>a[i],a[i]^=a[i-1];
for(int i=1;i<=m;i++){
cin>>q[i].l>>q[i].r;
q[i].id=i;
}
sort(q+1,q+m+1);
l=1,r=0;
f[0]=1;
for(int i=1;i<=m;i++){
while(l<q[i].l)del(l++);
while(l>q[i].l)add(--l);
while(r<q[i].r)add(++r);
while(r>q[i].r)del(r--);
ans[q[i].id]=res;
}
for(int i=1;i<=m;i++){
cout<<ans[i]<<'\n';
}
return 0;
}
回复
共 12 条回复,欢迎继续交流。
正在加载回复...