代码:
#include<bits/stdc++.h>
using namespace std;
int val[10010],cnt[10010];
int siz[10010];
int lc[10010],rc[10010];
int id[10010];
int n;
inline void insert(int k,int v)
{
if(n==0)
{
n++;
val[n]=v;
cnt[n]=1;
siz[n]=1;
lc[n]=0;
rc[n]=0;
return;
}
if(!k)
{
n++;
val[n]=v;
cnt[n]=1;
siz[n]=1;
lc[n]=0;
rc[n]=0;
return;
}
siz[k]++;
if(val[k]==v)
{
cnt[k]++;
return;
}
if(val[k]>v)
{
insert(lc[k],v);
if(!lc[k])
lc[k]=n;
}
if(val[k]<v)
{
insert(rc[k],v);
if(!rc[k])
rc[k]=n;
}
}
inline int qrnk(int k,int v)
{
if(val[k]==v)
return siz[lc[k]]+1;
if(val[k]>v)
return qrnk(lc[k],v);
if(val[k]<v)
return siz[lc[k]]+cnt[k]+qrnk(rc[k],v);
}
inline int qkth(int k,int v)
{
if(siz[lc[k]]>=v)
return qkth(lc[k],v);
if(siz[lc[k]]<v-cnt[k])
return qkth(rc[k],v-siz[lc[k]]-cnt[k]);
return val[k];
}
inline int zd(int k)
{
if(rc[k])
return zd(rc[k]);
return val[k];
}
inline int zx(int k)
{
if(lc[k])
return zx(lc[k]);
return val[k];
}
int main()
{
int q,mi=1000000000,ma=0;
cin>>q;
for(int i=1;i<=q;i++)
{
int op,x;
cin>>op>>x;
if(op==1)
cout<<qrnk(1,x)<<endl;
else if(op==2)
cout<<qkth(1,x)<<endl;
else if(op==3)
if(mi!=x)
cout<<qkth(1,qrnk(1,x)-1)<<endl;
else
cout<<-2147483647<<endl;
else if(op==4)
if(ma!=x)
cout<<qkth(1,qrnk(1,x)+1)<<endl;
else
cout<<2147483647<<endl;
else
insert(1,x),mi=min(mi,x),ma=max(ma,x);
}
return 0;
}