可持久化01trie板子

int rt[M];
int cnt[M<<5];
int ch[M<<5][2];
int pre[M];
int tot=0;
int n,m;
void ins(int a,int b,int t,int x){
    if(t<0)return;
    int i = (x>>t)&1;
    ch[a][!i]=ch[b][!i];
    ch[a][i]=++tot;
    cnt[ch[a][i]]=cnt[ch[b][i]]+1;
    ins(ch[a][i],ch[b][i],t-1,x);
}
int qu(int a,int b,int t,int x){
    if(t<0)return 0;
    int i =(x>>t)&1;
    if(cnt[ch[b][!i]]>cnt[ch[a][!i]]){
        return (1ll<<t)+qu(ch[a][!i],ch[b][!i],t-1,x);
    }else{
        return qu(ch[a][i],ch[b][i],t-1,x);
    }
}
void solve(){
    cin>>n>>m;
    rt[0]=++tot;
    ins(rt[0],0,25,0);
    for(int i=1;i<=n;i++){
        int x;cin>>x;
        pre[i]=pre[i-1]^x;
        rt[i]=++tot;
        ins(rt[i],rt[i-1],25,pre[i]);
    }
    rep(i,1,m){
        char o;cin>>o;
        if(o=='A'){
            n++;
            int x;cin>>x;
            pre[n]=pre[n-1]^x;
            rt[n]=++tot;
            ins(rt[n],rt[n-1],25,pre[n]);
        }else{
            int l,r,k;cin>>l>>r>>k;
            l--;r--;
            if(i==0)cout<<qu(0,rt[r],25,k^pre[n]);
            else cout<<qu(rt[l-1],rt[r],25,k^pre[n]);
            cout<<endl;
        }
    }

}
posted @ 2025-11-25 21:37  Marinaco  阅读(0)  评论(0)    收藏  举报
//雪花飘落效果