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();
}
posted @ 2026-04-06 10:06  LEWISAK  阅读(7)  评论(0)    收藏  举报