#include using namespace std; typedef long long ll; struct Node { int count; Node * p1; Node * p2; Node(){ count=0; p1=0; p2=0; } }; void add(Node*p,ll v,ll l,ll r,int inc){ p->count+=inc; if(lp1){ p->p1=new Node; } add(p->p1,v,l,c,inc); }else{ if(!p->p2){ p->p2=new Node; } add(p->p2,v,c,r,inc); } } } int count(Node*p,ll v,ll l,ll r){ ll c=(l+r)/2; if(vp1 ? count(p->p1,v,l,c) : 0) + (p->p2 ? p->p2->count : 0); }else{ return (p->p2 ? count(p->p2,v,c,r) : 0); } } Node * root; ll a[100010]; int n; main(){ root=new Node; ll offset=1ll<<49; int Q; cin>>Q; for(int i=0;i>t>>x; if(t==1){ ll y=x+offset; a[++n]=y; add(root,y,0,1ll<<50,1); } if(t==2){ ll y=a[x]; add(root,y,0,1ll<<50,-1); } if(t==3){ offset-=x; } { int l=0; int r=root->count+1; while(l=c){ l=c; }else{ r=c; } } cout<