#include<bits/stdc++.h>
#define ls T[now].son[0]
#define rs T[now].son[1]
using namespace std;
const double alp=1.0-sqrt(2)*0.5;
const double bta=(1.0-alp*2.0)/(1.0-alp);
const int Maxn=100005;
long long n;
struct dataa
{
int si,va;
int son[2];
}T[Maxn<<1];
int cnt=0;
int new_tree(int _v,int _s,int _l,int _r)
{
int node=++cnt;
T[node]=(dataa){_s,_v,_l,_r};
return node;
}
int root=new_tree(0x3f3f3f3f,0,0,0);
void pushup(int now)
{
if (ls==0) return ;
T[now].si=T[ls].si+T[rs].si;
T[now].va=T[rs].va;
return ;
}
int finds(int now,int v)
{
if (!ls)
{
if (T[ls].va!=v) return -1;
return now;
}
return finds(T[now].son[(v>T[ls].va)],v);
}
int Mix(int a,int b)
{
int res=new_tree(0,0,0,0);
T[res].son[0]=a;
T[res].son[1]=b;
pushup(res);
return res;
}
void rot(int now,int q)
{
if (!ls) return ;
int nms=T[T[now].son[q]].son[q];
if (q)
ls=Mix(ls,T[rs].son[0]);else
rs=Mix(T[ls].son[1],rs);
T[now].son[q]=nms;
}
void remain(int now)
{
if (!ls) return ;
int q=0;
if (T[ls].si<T[now].si*alp) q=1;
else if (T[rs].si<T[now].si*alp) q=0;
else return ;
if (T[T[T[now].son[q]].son[q^1]].si>=T[T[now].son[q]].si*bta) rot(T[now].son[q],q^1);
rot(now,q);
}
void ins(int &now,int v)
{
if (!now) {now=new_tree(v,1,0,0);return ;}
if (ls==0) ls=new_tree(min(v,T[now].va),1,0,0),rs=new_tree(max(v,T[now].va),1,0,0);
else ins(T[now].son[T[ls].va<v],v);
pushup(now),remain(now);
}
void del(int &now,int v)
{
if (!now) return ;
int p=bool(v>T[ls].va);
if (!T[T[now].son[p]].son[0])
{
if (T[T[now].son[p]].va!=v) return ;
T[now]=T[T[now].son[(p^1)]];
}
del(T[now].son[p],v);
pushup(now),remain(now);
}
int ran(int now,int v)
{
if (!ls) return 1;
int p=(v>T[ls].va);
if (p==1) return ran(rs,v)+T[ls].si; else return ran(ls,v);
}
int kth(int now,int k)
{
if (!T[now].son[0]) return T[now].va;
if (T[ls].si<k) return kth(rs,k-T[ls].si);
return kth(ls,k);
}
int main()
{
scanf("%d",&n);
while(n--)
{
int s,a;
scanf("%d%d",&s,&a);
if(s==1) ins(root,a);
if(s==2) del(root,a);
if(s==3) printf("%d\n",ran(root,a));
if(s==4) printf("%d\n",kth(root,a));
if(s==5) printf("%d\n",kth(root,ran(root,a)-1));
if(s==6) printf("%d\n",kth(root,ran(root,a+1)));
}
return 0;
}
比如平衡树模板的程序,求评价马蜂