https://www.luogu.com.cn/problem/P4735
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
int root[1<<20];
int tree[5000001][2];
int vis[5000001];
int tot;
int num[35],cnt;
const int POW=pow(2,29);
void work(int x)
{
cnt=0;
memset(num,0,sizeof(num));
int nw=POW;
while(nw)
{
num[++cnt]=(nw&x)>0;
nw>>=1;
}
// cout<<cnt<<" ";
}
void add(int &p,int lastp)
{
if(!p) p=++tot;
int nw=p,lastnw=lastp;
bool f=0;
for(int i=1;i<=cnt;i++)
{
tree[nw][1^num[i]]=tree[lastnw][1^num[i]];
tree[nw][num[i]]=++tot;
nw=tree[nw][num[i]];
lastnw=tree[lastnw][num[i]];
if(num[i]) f=1;
vis[nw]=vis[lastnw]+f;
}
}
int query(int nw,int lastnw)
{
int ans=0;
unsigned ksm=POW;
for(int i=1;i<=cnt;i++)
{
nw=tree[nw][num[i]];
lastnw=tree[lastnw][num[i]];
int dt=vis[tree[nw][num[i]^1]]-vis[tree[lastnw][num[i]^1]];
if(dt>0)
{
cout<<"i="<<i<<" ksm="<<ksm<<" nw="<<nw<<" lastnw="<<lastnw<<" vis[tree[nw][num[i]^1]]="<<vis[tree[nw][num[i]^1]]<<" vis[tree[lastnw][num[i]^1]]="<<vis[tree[lastnw][num[i]^1]]<<" dt="<<dt<<" \n";
ans+=ksm;
nw=tree[nw][num[i]^1];
lastnw=tree[lastnw][num[i]^1];
}
else
{
nw=tree[nw][num[i]];
lastnw=tree[lastnw][num[i]];
}
ksm>>=1;
}
// cout<<ans;
return ans;
}
void output(int x)
{
cout<<"x="<<x<<" ";
for(int i=1;i<=cnt;i++)
{
cout<<num[i];
}
cout<<"\n";
for(int i=1;i<=tot;i++)
{
cout<<"i="<<i<<" lp="<<tree[i][0]<<" rp="<<tree[i][1]<<" vis="<<vis[i]<<"\n";
}
cout<<"\n\n";
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
// root[i]=++tot;
work(x);
add(root[i],root[i-1]);
}
// for(int i=1;i<=n;i++)
// {
// cout<<root[i]<<" ";
// }
// cout<<"\n";
while(m--)
{
char c;
cin>>c;
if(c=='A')
{
int x;
cin>>x;
n++;
work(x);
// output(x);
add(root[n],root[n-1]);
}
else
{
int l,r,x;
cin>>l>>r>>x;
work(x);
output(x);
cout<<query(root[r],root[l-1])<<"\n";
}
}
//mt19937_64 myrand(time(0));
return 0;
}
/*
5 2
2 6 4 3 6
A 6
Q 3 5 4
*/
以下是博客签名,正文无关
本文来自博客园,作者:Wy_x,转载请在文首注明原文链接:https://www.cnblogs.com/Wy-x/articles/18725339
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC-BY-NC-SA 4.0 协议)进行许可。

浙公网安备 33010602011771号