Submission #43144537


Source Code Expand

#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
using namespace std;
#define rep(i,n) for(int i=0;i<n;i++)
#define per(i,n) for(int i=n-1;i>=0;i--)
#define rng(i,c,n) for(int i=c;i<n;i++)
#define fi first
#define se second
#define pb push_back
#define sz(a) (int)a.size()
#define vec(...) vector<__VA_ARGS__>
#define _3r0SfjC ios::sync_with_stdio(0),cin.tie(0)
typedef long long ll;
using vi=vector<int>;
using pii=pair<int,int>;
void print(){cout<<'\n';}
template<class h,class...t>
void print(const h&v,const t&...u){cout<<v<<' ',print(u...);}

vi tree[5000000];

struct seg_rangecover{
	int n;
	seg_rangecover(int _n){
		init(_n);
	}
	void init(int _n){
		n=_n;
	}
	void add(int node,int l,int r,int _l,int _r,int u){
		if(l>=_r or r<=_l){
			return;
		}
		if(l>=_l and r<=_r){
			tree[node].emplace_back(u);
			return;
		}
		int m=(l+r)/2;
		add(node*2+1,l,m,_l,_r,u);
		add(node*2+2,m,r,_l,_r,u);
	}
	void add(int l,int r,int u){
		add(0,0,n,l,r,u);
	}
};

struct N{
	int nxt[2]={-1,-1};
	int cnt[2]={0,0};
};

struct Q{
	int typ,x;
};

void slv(){
	int q;
	cin>>q;
	// q=2e5;
	
	vec(Q) qry;
	multiset<int> mst1;
	rep(i,q){
		int typ,x=-1;
		cin>>typ;
		if(typ<3){
			cin>>x;
		}
		// typ=qrand()%3+1;
		// if(typ==1){
		// 	x=qrand()%(int)(100);
		// 	mst1.insert(x);
		// }else if(typ==2){
		// 	if(sz(mst1)){
		// 		x=*prev(mst1.end());
		// 		mst1.erase(mst1.find(x));
		// 	}else{
		// 		typ=1;
		// 		x=qrand()%(int)(100);
		// 	}
		// }
		qry.pb(Q{typ,x});
	}

	seg_rangecover seg(q);
	map<int,vi> lst;
	rep(i,q){
		auto [typ,x]=qry[i];
		if(typ==1){
			lst[x].pb(i);
		}else if(typ==2){
			seg.add(lst[x].back(),i,x);
			lst[x].pop_back();
		}
	}
	for(auto&p:lst){
		while(sz(p.se)){
			seg.add(p.se.back(),q,p.fi);
			p.se.pop_back();
		}
	}

	vi pns(q);
	vec(N) trie;
	trie.pb({});
	multiset<int> mst;
	auto rec=[&](auto self,int node,int l,int r)->void{
		int cnt=0;
		vec(pii) delay;
		vi delay2;
		for(auto x:tree[node]){
			// find minimum
			int cur=2e9;
			if(sz(mst)){
				cur=*mst.begin();
			}
			{
				int val=0;
				int rt=0;
				per(j,30){
					int v=(x>>j&1);
					if(trie[rt].cnt[v]>0){
						rt=trie[rt].nxt[v];
					}else{
						val^=(1<<j);
						rt=trie[rt].nxt[v^1];
					}
					if(rt==-1){
						val=-1;
						break;
					}
					if(val>cur){
						break;
					}
				}
				if(val!=-1){
					mst.insert(val);
					delay2.pb(val);
				}
			}
			// insert in
			{
				int rt=0;
				per(j,30){
					int v=(x>>j&1);
					trie[rt].cnt[v]+=1;
					delay.emplace_back(rt,v);
					if(trie[rt].nxt[v]!=-1){
						rt=trie[rt].nxt[v];
					}else{
						trie[rt].nxt[v]=sz(trie);
						rt=sz(trie);
						trie.pb({});
						cnt+=1;
					}
				}
			}
		}
		if(l==r-1){
			if(sz(mst)){
				pns[l]=*mst.begin();
			}
		}else{
			int m=(l+r)/2;
			self(self,node*2+1,l,m);
			self(self,node*2+2,m,r);
		}
		// for(auto [rt,v]:delay1){
		// 	trie[rt].nxt[v]=-1;
		// }
		for(auto [rt,v]:delay){
			trie[rt].cnt[v]-=1;
			if(trie[rt].cnt[v]==0){
				trie[rt].nxt[v]=-1;
			}
		}
		rep(_,cnt){
			trie.pop_back();
		}
		for(auto x:delay2){
			mst.erase(mst.find(x));
		}
	};
	rec(rec,0,0,q);

	rep(i,q){
		if(qry[i].typ==3){
			cout<<pns[i]<<"\n";
		}
	}
}

signed main(){
_3r0SfjC;
	slv();
}

Submission Info

Submission Time
Task G - Minimum Xor Pair Query
User ivatopuria
Language C++ (GCC 9.2.1)
Score 600
Code Size 3443 Byte
Status AC
Exec Time 2989 ms
Memory 341836 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 1
AC × 25
Set Name Test Cases
Sample 00_sample_01.txt
All 00_sample_01.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt
Case Name Status Exec Time Memory
00_sample_01.txt AC 89 ms 120740 KiB
01_test_01.txt AC 1854 ms 284932 KiB
01_test_02.txt AC 1860 ms 284960 KiB
01_test_03.txt AC 1861 ms 284868 KiB
01_test_04.txt AC 1845 ms 285224 KiB
01_test_05.txt AC 1835 ms 285372 KiB
01_test_06.txt AC 1879 ms 285088 KiB
01_test_07.txt AC 1842 ms 285368 KiB
01_test_08.txt AC 1862 ms 285100 KiB
01_test_09.txt AC 396 ms 139644 KiB
01_test_10.txt AC 399 ms 139712 KiB
01_test_11.txt AC 507 ms 140764 KiB
01_test_12.txt AC 518 ms 140872 KiB
01_test_13.txt AC 632 ms 143240 KiB
01_test_14.txt AC 633 ms 143244 KiB
01_test_15.txt AC 888 ms 153860 KiB
01_test_16.txt AC 903 ms 153760 KiB
01_test_17.txt AC 744 ms 193904 KiB
01_test_18.txt AC 2935 ms 341432 KiB
01_test_19.txt AC 2989 ms 341836 KiB
01_test_20.txt AC 1435 ms 286844 KiB
01_test_21.txt AC 1452 ms 286728 KiB
01_test_22.txt AC 2111 ms 249380 KiB
01_test_23.txt AC 2087 ms 249292 KiB
01_test_24.txt AC 198 ms 128288 KiB