111
stack:
#include<bits/stdc++.h>
#define int long long
using namespace std;
namespace kong{bool st;}
namespace zhu{
int n,ans[500500];
unordered_map<int,stack<int>> mp;
int p[35];
int insert(int x){
for(int i=32;i>=0;i--){
if(!(x>>i)) continue;
if(!p[i]){
p[i]=x;
return i;
}
x^=p[i];
}
return 33;
}
int que(){
int res=0;
for(int i=32;i>=0;i--) res=max(res,res^p[i]);
return res;
}
struct{
int l,r;
vector<int> ve;
}tr[2000020];
//int mo1[2000020][2];
//Murasame mo2[2000020];
//vector<int> mo3[2000020];
#define ls (id<<1)
#define rs (id<<1|1)
#define l(x) tr[x].l
#define r(x) tr[x].r
#define v(x) tr[x].v
#define ve(x) tr[x].ve
#define mid ((l(id)+r(id))>>1)
void build(int id,int l,int r){
l(id)=l,r(id)=r;
if(l==r) return;
build(ls,l,mid);
build(rs,mid+1,r);
}
void add(int id,int l,int r,int x){
// cout<<l<<' '<<r<<" "<<x<<"\n";
if(l(id)>=l&&r(id)<=r){
ve(id).push_back(x);
return;
}
if(l<=mid) add(ls,l,r,x);
if(r>mid) add(rs,l,r,x);
}
void solve(int id){
bool vis[35];
memset(vis,0,sizeof vis);
for(auto x:ve(id)) vis[insert(x)]=1;
if(l(id)==r(id)){
ans[l(id)]=que();
for(int i=0;i<=32;i++) p[i]=vis[i]?0:p[i];
return;
}
solve(ls),solve(rs);
for(int i=0;i<=32;i++) p[i]=vis[i]?0:p[i];
}
string main(){
// system("fc 1.out my.out");
// freopen("1.in","r",stdin);
// freopen("my.out","w",stdout);
cin>>n;
build(1,1,n);
for(int i=1;i<=n;i++){
int x;
cin>>x;
if(x>0) mp[x].push(i);
else add(1,mp[-x].top(),i-1,-x),mp[-x].pop();
}
for(auto x:mp){
while(!x.second.empty()){
add(1,x.second.top(),n,x.first);
x.second.pop();
}
}
solve(1);
for(int i=1;i<=n;i++) cout<<ans[i]<<'\n';
return "A";
}
}
namespace kong{bool ed;double MB(){return (&st-&ed)/1048576.0;}}
signed main(){
cin.tie(0);cout.tie(0);
ios::sync_with_stdio(0);
cerr<<zhu::main()<<'\n'<<kong::MB();
}
vector:
#include<bits/stdc++.h>
#define int long long
using namespace std;
namespace kong{bool st;}
namespace zhu{
int n,ans[500500];
unordered_map<int,vector<int>> mp;
int p[35];
int insert(int x){
for(int i=32;i>=0;i--){
if(!(x>>i)) continue;
if(!p[i]){
p[i]=x;
return i;
}
x^=p[i];
}
return 33;
}
int que(){
int res=0;
for(int i=32;i>=0;i--) res=max(res,res^p[i]);
return res;
}
struct{
int l,r;
vector<int> ve;
}tr[2000020];
//int mo1[2000020][2];
//Murasame mo2[2000020];
//vector<int> mo3[2000020];
#define ls (id<<1)
#define rs (id<<1|1)
#define l(x) tr[x].l
#define r(x) tr[x].r
#define v(x) tr[x].v
#define ve(x) tr[x].ve
#define mid ((l(id)+r(id))>>1)
void build(int id,int l,int r){
l(id)=l,r(id)=r;
if(l==r) return;
build(ls,l,mid);
build(rs,mid+1,r);
}
void add(int id,int l,int r,int x){
// cout<<l<<' '<<r<<" "<<x<<"\n";
if(l(id)>=l&&r(id)<=r){
ve(id).push_back(x);
return;
}
if(l<=mid) add(ls,l,r,x);
if(r>mid) add(rs,l,r,x);
}
void solve(int id){
bool vis[35];
memset(vis,0,sizeof vis);
for(auto x:ve(id)) vis[insert(x)]=1;
if(l(id)==r(id)){
ans[l(id)]=que();
for(int i=0;i<=32;i++) p[i]=vis[i]?0:p[i];
return;
}
solve(ls),solve(rs);
for(int i=0;i<=32;i++) p[i]=vis[i]?0:p[i];
}
string main(){
// system("fc 1.out my.out");
// freopen("1.in","r",stdin);
// freopen("my.out","w",stdout);
cin>>n;
build(1,1,n);
for(int i=1;i<=n;i++){
int x;
cin>>x;
if(x>0) mp[x].push_back(i);
else add(1,mp[-x].back(),i-1,-x),mp[-x].pop_back();
}
for(auto x:mp){
while(!x.second.empty()){
add(1,x.second.back(),n,x.first);
x.second.pop_back();
}
}
solve(1);
for(int i=1;i<=n;i++) cout<<ans[i]<<'\n';
return "A";
}
}
namespace kong{bool ed;double MB(){return (&st-&ed)/1048576.0;}}
signed main(){
cin.tie(0);cout.tie(0);
ios::sync_with_stdio(0);
cerr<<zhu::main()<<'\n'<<kong::MB();
}

浙公网安备 33010602011771号