题解:P5670 秘籍-反复异或
前情提要。
题意
有一个长度为
思路
本题是一道纯粹的模拟题,考察对题目的模拟能力,对于每个操作,我们只需要按题意模拟即可。
值得注意的是,无符号类型整数做大量位运算时比有符号类型整数快得多。
#include<bits/stdc++.h>
#define short unsigned short
using namespace std;
const int N=1e5+5;
short a[N],op[N];
short ans[N];
int x[N],y[N],c[N],len;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n,m,q;
cin>>n>>m>>q;
short k=(1<<m)-1;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=q;i++){
cin>>op[i]>>x[i]>>y[i];
if(op[i]==1) cin>>c[i];
}
short xx=0;
for(int l=1;l<=q;l++){
if(op[l]==1)
for(int i=x[l];i<=y[l];i++) a[i]=a[i]+c[l]&k;
else{
for(int i=x[l];i<=y[l];i++) xx^=a[i];
ans[++len]=xx,xx=0;
}
}
for(int i=1;i<=len;i++) cout<<ans[i]<<'\n';
return 0;
}