扔板跑……

 #include<bits/stdc++.h>
#define N 100010
#define mp make_pair
using namespace std;
typedef pair<int,int> par;
int n,x,rt;
struct Treap_Without_rotate{
int ls[N],rs[N],rnd[N],val[N],size[N],cnt;
inline void pushup(int x){size[x]=size[ls[x]]+size[rs[x]]+;}
par split(int k,int x){
if(!x)return mp(,k);int l=ls[k],r=rs[k];
if(x==size[l]){ls[k]=;pushup(k);return mp(l,k);}
if(x==size[l]+){rs[k]=;pushup(k);return mp(k,r);}
if(x<size[l]){
par tmp=split(l,x);
ls[k]=tmp.second;pushup(k);return mp(tmp.first,k);
}
par tmp=split(r,x-size[l]-);
rs[k]=tmp.first;pushup(k);return mp(k,tmp.second);
}
int merge(int x,int y){
if(x==||y==)return x+y;
if(rnd[x]<rnd[y]){rs[x]=merge(rs[x],y);pushup(x);return x;}
else{ls[y]=merge(x,ls[y]);pushup(y);return y;}
}
int queryrank(int x,int k){
int ans=,tmp=(int)1e9;
while(k){
if(x==val[k])tmp=min(tmp,ans+size[ls[k]]+);
if(x>val[k])ans+=size[ls[k]]+,k=rs[k];
else k=ls[k];
}
return tmp==(int)1e9?ans:tmp;
}
int find(int x,int k){
for(;;){
if(size[ls[k]]==x-)return val[k];
if(size[ls[k]]>x-)k=ls[k];
else x=x-size[ls[k]]-,k=rs[k];
}
}
int querypre(int x,int k){
int ans=-(int)1e9;
while(k){
if(val[k]<x)ans=max(ans,val[k]),k=rs[k];
else k=ls[k];
}return ans;
}
int querysub(int x,int k){
int ans=(int)1e9;
while(k){
if(val[k]>x)ans=min(ans,val[k]),k=ls[k];
else k=rs[k];
}return ans;
}
void ins(int x){
int k=queryrank(x,rt);par tmp=split(rt,k);
val[++cnt]=x;rnd[cnt]=rand();size[cnt]=;
rt=merge(tmp.first,cnt);rt=merge(rt,tmp.second);
}
void del(int x){
int k=queryrank(x,rt);par t1=split(rt,k),t2=split(t1.first,k-);
rt=merge(t2.first,t1.second);
}
}T;
inline int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
int main(){
n=read();srand();
for(int i=;i<=n;i++){
int opt=read(),x=read();
if(opt==)T.ins(x);
if(opt==)T.del(x);
if(opt==)printf("%d\n",T.queryrank(x,rt));
if(opt==)printf("%d\n",T.find(x,rt));
if(opt==)printf("%d\n",T.querypre(x,rt));
if(opt==)printf("%d\n",T.querysub(x,rt));
}
return ;
}
05-11 22:39