求赞!
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=6e5+10;
ll n,m,s,idx,cnt,rt[N],son[N*24][2],sz[N*24];
void insert(ll v) {
rt[++idx]=++cnt;
ll x=rt[idx-1],y=rt[idx];
for(ll i=23; i>=0; --i) {
ll j=v>>i&1;
son[y][!j]=son[x][!j],son[y][j]=++cnt;
x=son[x][j],y=son[y][j];
sz[y]=sz[x]+1;
}
}
ll query(ll x,ll y,ll v) {
ll ans=0;
for(ll i=23; i>=0; --i) {
ll j=v>>i&1;
if(sz[son[y][!j]]>sz[son[x][!j]]) ans+=1<<i,x=son[x][!j],y=son[y][!j];
else x=son[x][j],y=son[y][j];
}
return ans;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
insert(0);
for(ll i=1,a; i<=n; ++i) cin>>a,insert(s^=a);
while(m--) {
char op;
ll l,r,x;
cin>>op;
if(op=='A') cin>>x,insert(s^=x);
else cin>>l>>r>>x,cout<<query(rt[l-1],rt[r],s^x)<<"\n";
}
return 0;
}