解题关键:无旋treap模板。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctime>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define maxn 500001
using namespace std;
typedef long long ll;
int size[maxn],ch[maxn][],rnd[maxn],val[maxn];
int ncnt,n,x,y,z,rt; inline void pushup(int x){
size[x]=+size[ch[x][]]+size[ch[x][]];
} inline int new_node(int x){
size[++ncnt]=;
val[ncnt]=x;
rnd[ncnt]=rand();
return ncnt;
}
//核心
int merge(int A,int B){
if(!A||!B) return A+B;
if(rnd[A]<rnd[B]){ch[A][]=merge(ch[A][],B);
pushup(A);return A;}
else {ch[B][]=merge(A,ch[B][]);
pushup(B);return B;}
}
//权值分裂
void split(int now,int k,int &x,int &y){
if(!now) x=y=;
else{
if(val[now]<=k) x=now,split(ch[now][],k,ch[now][],y);
else y=now,split(ch[now][],k,x,ch[now][]);
pushup(now);
}
}
//排名分裂
void split_2(int now,int k,int &x,int &y){
if(!now) x=y=;
else{
if(k<=size[ch[now][]]){y=now;split(ch[now][],k,x,ch[now][]);}
else{x=now;split(ch[now][],k-size[ch[now][]]-,ch[now][],y);}
pushup(now);
}
} void insert(int &k,int a){
split(k,a,x,y);
k=merge(merge(x,new_node(a)),y);
}
//会浪费空间,没有回收节点
void del(int &k,int a){
split(k,a,x,z);
split(x,a-,x,y);
y=merge(ch[y][],ch[y][]);
k=merge(merge(x,y),z);
} int rnk(int &k,int a){
split(k,a-,x,y);
int res=size[x]+;
k=merge(x,y);
return res;
} int kth(int now,int k){
while(){
if(k<=size[ch[now][]]) now=ch[now][];
else if(k==size[ch[now][]]+) return val[now];
else k-=size[ch[now][]]+,now=ch[now][];
}
} int pred(int &k,int a){
split(k,a-,x,y);
int res=kth(x,size[x]);
k=merge(x,y);
return res;
} int succ(int &k,int a){
split(k,a,x,y);
int res=kth(y,);
k=merge(x,y);
return res;
} int main(){
srand(time());
scanf("%d",&n);
for(int i=,opt,a;i<=n;i++){
scanf("%d%d",&opt,&a);
switch(opt){
case :insert(rt,a);break;
case :del(rt,a);break;
case :printf("%d\n",rnk(rt,a));break;
case :printf("%d\n",kth(rt,a));break;
case :printf("%d\n",pred(rt,a));break;
case :printf("%d\n",succ(rt,a));break;
}
}
return ;
}

[luogu3369]普通平衡树(fhq-treap模板)的更多相关文章

  1. 2021.12.08 平衡树——FHQ Treap

    2021.12.08 平衡树--FHQ Treap http://www.yhzq-blog.cc/fhqtreapzongjie/ https://www.cnblogs.com/zwfymqz/p ...

  2. Luogu P3835 【模板】可持久化平衡树(fhq Treap)

    P3835 [模板]可持久化平衡树 题意 题目背景 本题为题目普通平衡树的可持久化加强版. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作(对于各个以往的历史版本 ...

  3. P3391 【模板】文艺平衡树FHQ treap

    P3391 [模板]文艺平衡树(Splay) 题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转 ...

  4. 洛谷.3369.[模板]普通平衡树(fhq Treap)

    题目链接 第一次(2017.12.24): #include<cstdio> #include<cctype> #include<algorithm> //#def ...

  5. 洛谷.3835.[模板]可持久化平衡树(fhq treap)

    题目链接 对每次Merge(),Split()时产生的节点都复制一份(其实和主席树一样).时间空间复杂度都为O(qlogq).(应该更大些 因为rand()?内存真的爆炸..) 对于无修改的操作实际上 ...

  6. BZOJ 3224 普通平衡树(Treap模板题)

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 14301  Solved: 6208 [Submit][ ...

  7. [luogu3369]普通平衡树(替罪羊树模板)

    解题关键:由于需要根据平衡进行重建,所以不能进行去重,否则无法保证平衡性. #include<cstdio> #include<cstring> #include<alg ...

  8. [luogu3369] 普通平衡树(splay模板)

    题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1.插入 xx 数 2.删除 xx 数(若有多个相同的数,因只删除一个) 3.查询 xx 数的排名(排名定义为比 ...

  9. 简析平衡树(四)——FHQ Treap

    前言 好久没码过平衡树了! 这次在闪指导的指导下学会了\(FHQ\ Treap\),一方面是因为听说它可以可持久化,另一方面则是因为听说它是真的好写. 简介 \(FHQ\ Treap\),又称作非旋\ ...

  10. FHQ Treap及其可持久化与朝鲜树式重构

    FHQ Treap,又称无旋treap,一种不基于旋转机制的平衡树,可支持所有有旋treap.splay等能支持的操作(只有在LCT中会比splay复杂度多一个log).最重要的是,它是OI中唯一一种 ...

随机推荐

  1. 《Ubuntu入门基础》第三篇

    创建虚拟磁盘

  2. [QT]问题记录-控件初始化导致程序异常关闭

    qt新手,在设置 pushButton 的字体颜色时,出现软件异常闭,代码如下: 按钮的初始化在  ui->setupUi(this); 前边,会出现一下问题. 解决办法:将按钮的初始化在  u ...

  3. 高级C/C++编译技术之读书笔记(四)之定位库文件

    最近有幸阅读了<高级C/C++编译技术>深受启发,该书深入浅出地讲解了构建过程(编译.链接)中的各种细节,从多个角度展示了程序与库文件或代码的集成方法,提出了面向代码复用和系统集成的软件架 ...

  4. ExpressionTree,Emit,反射

    ExpressionTree,Emit,反射 https://www.cnblogs.com/7tiny/p/9861166.html [前言] 前几日心血来潮想研究着做一个Spring框架,自然地就 ...

  5. word中如何将空格变成换行

    大家在工作和学习中可能会遇到文字替换或符号替换,大家要学会txt.doc.xls之间的切换,替换好之后放到最终的文件中,txt好处是没有格式,doc个好处是有格式,而xls主要是分配到单元格中. 那么 ...

  6. 如何理解Robot Framework

    不知不觉公众号已经有很多人关注了,小编先谢谢大家的支持-今天我们就来谈一谈我对RF的理解,因为前段时间换了工作,目前RF知识基本用不上了.其实我在上一份工作中大部分都是在反复的使用前面讲过的知识——其 ...

  7. computed属性与methods、watched

    一.计算属性 new Vue({ data: { message: 'hello vue.js !' }, computed: { reverseMessage: function () { retu ...

  8. PCB 锣板和半孔工艺的差别

    PCB 锣板和半孔工艺的差别 PCB 在做模块时会用到半孔工艺,但是由于半孔是特殊工艺. 需要加费用,打板时费还不低. 下面这个图是锣板和半孔工艺的差别. https://www.amobbs.com ...

  9. linux之 crontab 定时任务

    crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查 ...

  10. Tomcat设置欢迎页问题

    今天下载了tomat9,配置到eclipse后拉起来,想跑个欢迎页看看是否起好了,随手写了个index.jsp放到项目Struts2的WebContent根目录下,直接打开网页输入http://loc ...