```
#include<algorithm>
#include<iostream>
#include<cstdio>
#define int long long
using namespace std;
inline int read(){
int x=0,flag=1;char ch=getchar();
while(ch<'0' || ch>'9'){if(ch=='-')flag=-1;ch=getchar();}
while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return x*flag;
}
const int N=1e5+10;
struct NODE{
int op,x;
}a[N];
int b[N];
struct Node{
int l,r;
int tot;
}t[N<<2];
Node operator +(const Node &a,const Node &b){
Node res;
res.l=a.l,res.r=b.r;
res.tot=a.tot+b.tot;
return res;
}
void build(int p,int l,int r){
t[p].l=l,t[p].r=r;
if(l==r) return;
int mid=(l+r)>>1;
build(p<<1,l,mid);
build(p<<1|1,mid+1,r);
}
void add(int p,int val){
t[p].tot++;
if(t[p].l==t[p].r) return;
int mid=(t[p].l+t[p].r)>>1;
if(val<=mid) add(p<<1,val);
else add(p<<1|1,val);
}
void del(int p,int val){
if(!t[p].tot) return;
t[p].tot--;
if(t[p].l==t[p].r) return;
int mid=(t[p].l+t[p].r)>>1;
if(val<=mid) del(p<<1,val);
else del(p<<1|1,val);
}
//int sum(int p,int val){
// if(t[p].l==t[p].r) return 0;
// int mid=(t[p].l+t[p].r)>>1;
// if(val<=mid) return sum(p<<1,val);
// else return t[p<<1].tot+sum(p<<1|1,val);
//}
int sum(int p,int l,int r){
if(l<=t[p].l && t[p].r<=r) return t[p].tot;
int mid=(t[p].l+t[p].r)>>1;
if(r<=mid) return sum(p<<1,l,r);
else return t[p<<1].tot+sum(p<<1|1,l,r);
}
int kth(int p,int val){
if(t[p].l==t[p].r) return t[p].l;
// if(val==1) return t[p].l;
int mid=(t[p].l+t[p].r)>>1;
if(val<=t[p<<1].tot) return kth(p<<1,val);
else return kth(p<<1|1,val-t[p<<1].tot);
}
inline int query5(int val){
int num=sum(1,1,val-1);
// cout<<"query5 "<<num<<'\n';
return kth(1,num);
}
inline int query6(int val){
int num=sum(1,1,val)+1;
// cout<<"query6 "<<num<<'\n';
return kth(1,num);
}
signed main(){
// freopen("114.in","r",stdin);
// freopen("114.out","w",stdout);
int n=read(),cnt=0;
for(int i=1;i<=n;++i){
a[i].op=read(),a[i].x=read();
if(a[i].op!=4) b[++cnt]=a[i].x;
}
sort(b+1,b+cnt+1);
int lenb=unique(b+1,b+n+1)-(b+1);
build(1,1,cnt);
for(int i=1;i<=n;++i){
int op=a[i].op,x=lower_bound(b+1,b+lenb+1,a[i].x)-b;
if(op==4) x=a[i].x;
// cout<<op<<' '<<x<<'\n';
if(op==1) add(1,x);
if(op==2) del(1,x);
if(op==3) cout<<sum(1,1,x-1)+1<<'\n';
if(op==4) cout<<b[kth(1,x)]<<'\n';
if(op==5) cout<<b[query5(x)]<<'\n';
if(op==6) cout<<b[query6(x)]<<'\n';
}
return 0;
}
```
by dyyzy_qwq @ 2023-10-15 20:43:34
@[dyyzy_qwq](/user/461012) 权值线段树 4 倍空间不够吧/yiw
我一般都开 40 倍空间
by hello_world_djh @ 2023-10-15 21:00:07
@[hello_world_djh](/user/450700) 离散化了QwQ。鉴定为神奇的数据导致的
by dyyzy_qwq @ 2023-10-15 21:02:58
@[dyyzy_qwq](/user/461012) 题目貌似不保证5 6询问都在范围内
by dyyzy_qwq @ 2023-10-15 21:04:50