#include<cstdio>
#include<algorithm>
#include<ctime>
using namespace std;
int n,tot = 0;
struct tree{
int siz,ls,rs,v,rnd;
}tr[100005];
int add(int val)
{
tr[++tot] = (tree){1,0,0,val,rand()};
return tot;
}
void update(int x){tr[x].siz = tr[tr[x].ls].siz + tr[tr[x].rs].siz + 1;}
void split(int rt,int &a,int &b,int val)
{
if (rt == 0) return void(a = b = 0);
if (tr[rt].v <= val) a = rt,split(tr[rt].rs,tr[a].rs,b,val);
else b = rt,split(tr[rt].ls,a,tr[b].ls,val);
update(rt);
}
void merge(int &rt,int a,int b)
{
if (a == 0 || b == 0) return void(rt = a + b);
if (tr[a].rnd < tr[b].rnd) rt = a,merge(tr[rt].rs,tr[a].rs,b);
else rt = b,merge(tr[rt].ls,a,tr[b].ls);
update(rt);
}
void Insert(int &rt,int val)
{
int x = 0,y = 0,k = add(val);
split(rt,x,y,val);
merge(x,x,k),merge(rt,x,y);
}
void Delete(int &rt,int val)
{
int x = 0,y = 0,z = 0;
split(rt,x,y,val),split(x,x,z,val - 1);
merge(z,tr[z].ls,tr[z].rs),merge(x,x,z),merge(rt,x,y);
}
int getkth(int rt,int k)
{
while (tr[tr[rt].ls].siz + 1 != k)
if (tr[tr[rt].ls].siz >= k) rt = tr[rt].ls;
else k -= tr[tr[rt].ls].siz + 1,rt = tr[rt].rs;
return tr[rt].v;
}
int getrnk(int &rt,int val)
{
int x = 0,y = 0,tmp;
split(rt,x,y,val - 1);
tmp = tr[x].siz + 1;
merge(rt,x,y);
return tmp;
}
int getpre(int &rt,int val)
{
int x = 0,y = 0,tmp;
split(rt,x,y,val - 1);
tmp = getkth(x,tr[x].siz);
merge(rt,x,y);
return tmp;
}
int getscc(int &rt,int val)
{
int x = 0,y = 0,tmp;
split(rt,x,y,val);
tmp = getkth(y,1);
merge(rt,x,y);
return tmp;
}
int main()
{
srand(time(NULL));
scanf("%d",&n);
int root = 0;
for (int i = 1,q,p; i <= n; i++)
{
scanf("%d%d",&q,&p);
if (q == 1) Insert(root,p);
if (q == 2) Delete(root,p);
if (q == 3) printf("%d\n",getrnk(root,p));
if (q == 4) printf("%d\n",getkth(root,p));
if (q == 5) printf("%d\n",getpre(root,p));
if (q == 6) printf("%d\n",getscc(root,p));
}
}
FHQ Treap 板子
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
「笔记」FHQ-Treap小记
$gyh$永远滴神!
FHQ-Treap 平衡树 笔记 -
文艺平衡树(Fhq Treap)
传送门:文艺平衡树首先要阐述一点,Fhq Treap的按大小分裂是支持区间操作的,而按值
#include 权值 平衡树 -
FHQ Treap(无旋 Treap)详解
FHQ Treap(无旋 Treap)的介绍和一个封装好的无旋Treap ...
数据结构 子树 权值 子节点 平衡树 -
fhq_treap 学习笔记
fhq_treap,学习笔记
平衡树 fhq_treap 子树 权值 #define