模板——无旋Treap
#include "bits/stdc++.h" using namespace std; inline int read(){
int s=,k=;char ch=getchar();
while(ch<''|ch>'') ch=='-'?k=-:,ch=getchar();
while(ch>&ch<='') s=s*+(ch^),ch=getchar();
return s*k;
} const int N=1e5+,inf=0x7fffffff; #define size(t) (t?t->size:0) struct Treap{
Treap *son[];
int fix,val,size;
Treap (int v){
size=,val=v,fix=rand();
son[]=son[]=NULL;
}
inline void update(){
size=+size(son[])+size(son[]);
}
}*root; typedef pair<Treap*,Treap*> D; inline Treap *merge(Treap *a,Treap *b){
if(!a||!b) return a?a:b;
if(a->fix<b->fix){
a->son[]=merge(a->son[],b);a->update();return a;
}else {
b->son[]=merge(a,b->son[]);b->update();return b;
}
} inline D split(Treap *p,int k){
if(!p) return D(NULL,NULL);
D y;
if(size(p->son[])>=k)
y=split(p->son[],k),p->son[]=y.second,p->update(),y.second=p;
else
y=split(p->son[],k--size(p->son[])),p->son[]=y.first,p->update(),y.first=p;
return y;
} inline int get_rnk(int val){
int ret=;
for(Treap *t=root;t;t=t->son[val>t->val])
if(t->val<val) ret+=+size(t->son[]);
return ret;
} inline int findkth(int k){
D x=split(root,k-);
D y=split(x.second,);
Treap *ans=y.first;
root=merge(merge(x.first,ans),y.second);
return ans?ans->val:;
} inline void insert(int val){
int k=get_rnk(val);
D x=split(root,k);
Treap *p=new Treap(val);
root=merge(merge(x.first,p),x.second);
} inline void erase(int val){
int k=get_rnk(val);
D x=split(root,k);
D y=split(x.second,);
root=merge(x.first,y.second);
} int main(){
freopen("phs.in","r",stdin);
freopen("phs.out","w",stdout);
srand();
int m,opt,x;m=read();
while(m--){
opt=read(),x=read();
switch(opt)
{
case :insert(x);break;
case :erase(x);break;
case :printf("%d\n",get_rnk(x)+);break;
case :printf("%d\n",findkth(x));break;
case :printf("%d\n",findkth(get_rnk(x)));break;
case :printf("%d\n",findkth(get_rnk(x+)+));break;
}
}
}
模板——无旋Treap的更多相关文章
- 模板 - 无旋Treap
一般而言作为一棵平衡树只需要插入,删除,值求排名,排名求值,前驱,后继,六个接口. #include<bits/stdc++.h> using namespace std; typedef ...
- [模板] 无旋Treap (C++ class)
注意!本帖不是算法介绍!只是贴代码(逃) //嫌stdlib的rand太慢,手打了一个 /* Author: hotwords */ typedef unsigned int tkey; class ...
- 无旋treap的简单思想以及模板
因为学了treap,不想弃坑去学splay,终于理解了无旋treap... 好像普通treap没卵用...(再次大雾) 简单说一下思想免得以后忘记.普通treap因为带旋转操作似乎没卵用,而无旋tre ...
- 模板 - 数据结构 - 可持久化无旋Treap/PersistentFHQTreap
有可能当树中有键值相同的节点时,貌似是要对Split和Merge均进行复制的,本人实测:只在Split的时候复制得到了一个WA,但只在Merge的时候复制还是AC,可能是恰好又躲过去了.有人说假如确保 ...
- 洛谷 - P3391 【模板】文艺平衡树(Splay) - 无旋Treap
https://www.luogu.org/problem/P3391 使用无旋Treap维护序列,注意的是按顺序插入的序列,所以Insert实际上简化成直接root和Merge合并,但是假如要在序列 ...
- 浅谈无旋treap(fhq_treap)
一.简介 无旋Treap(fhq_treap),是一种不用旋转的treap,其代码复杂度不高,应用范围广(能代替普通treap和splay的所有功能),是一种极其强大的平衡树. 无旋Treap是一个叫 ...
- [转载]无旋treap:从单点到区间(例题 BZOJ1500&NOI2005 维护数列 )
转自ZZH大佬,原文:http://www.cnblogs.com/LadyLex/p/7182631.html 1500: [NOI2005]维修数列 Time Limit: 10 Sec Mem ...
- [转载]无旋treap:从好奇到入门(例题:bzoj3224 普通平衡树)
转载自ZZH大佬,原文:http://www.cnblogs.com/LadyLex/p/7182491.html 今天我们来学习一种新的数据结构:无旋treap.它和splay一样支持区间操作,和t ...
- [您有新的未分配科技点]无旋treap:从好奇到入门(例题:bzoj3224 普通平衡树)
今天我们来学习一种新的数据结构:无旋treap.它和splay一样支持区间操作,和treap一样简单易懂,同时还支持可持久化. 无旋treap的节点定义和treap一样,都要同时满足树性质和堆性质,我 ...
随机推荐
- ethtool确定网卡对应的物理网口
在配置有多个网络接口的设备时我们会犯难,eth0.eth1.--到底是那个接口? 我使用的机器是CentOS系统,打开终端,输入ethtool –help 显示帮助信息,下面我就简要介绍一下最常用的两 ...
- rcp perspective 添加9个视图均匀排列
PageLayout布局方法 pageLayout.addView("NodePMTSStream" + ":1", IPageLayout.TOP, 0.5f ...
- jvm栈-运行控制,jvm-堆运行存储共享单元
JVM-栈 2012-09-17 15:43:53 分类: Java 原文转自:http://www.blogjava.net/nkjava/archive/2012/03/15/371971.ht ...
- centos6.X安装jdk
1.查看Linux自带的JDK是否已安装(如果安装则卸载CentOS已安装的低版本) [root@localhost soft]# java -version java version "1 ...
- SignUtil
最近接的新项目 加密比较多 我就记录下. SignUtil是jnewsdk-mer-1.0.0.jar com.jnewsdk.util中的一个工具类.由于我没有百度到对应的信息.所以我只能看源码 ...
- 如何使你的Ajax应用内容可让搜索引擎爬行
This document outlines the steps that are necessary in order to make your AJAX application crawlable ...
- jq监听input-val变化事件
$('body').on('input propertychange', '.info-number-val-box', function(event) { xxxxx });
- 利用Python脚本悄无声息的遥控室友电脑开机密码!
整蛊一下室友就行了,切勿用于非法用途! 利用python脚本控制室友windows系统电脑的开机密码.利用random()生成随机数(密码),天知地知,密码只有你自己知道! Python代码分为cli ...
- 「SQL归纳」树形结构表的存储与查询功能的实现——通过路径方法(非递归)
一.树形结构例子分析: 以360问答页面为例:http://wenda.so.com/c/ 我们通过观察URL,可以明确该页面的数据以树形结构存储,下面三块模块分别为: ①根节点 ②根节点的第一层子节 ...
- 洛谷 P2205 解题报告
P2205 画栅栏Painting the Fence 题目描述 \(Farmer\) \(John\) 想出了一个给牛棚旁的长围墙涂色的好方法.(为了简单起见,我们把围墙看做一维的数轴,每一个单位长 ...