[bzoj3224]普通平衡树[Treap]
Treap 的各种操作,模板题,要再写几遍
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime> using namespace std; class Treap
{
private:
struct Treap_Point
{
int l,r,val,size,key,num;
Treap_Point(){l=r=val=size=key=num=;}
};
Treap_Point d[];
int root,cnt;
pair<int,int> tmp; void update(const int t)
{
d[t].size=d[d[t].l].size+
d[d[t].r].size+d[t].num;
return ;
} void turn_R(int & t)
{
int temp=d[t].l;d[t].l=d[temp].r;d[temp].r=t;
d[temp].size=d[t].size;update(t);t=temp;return ;
} void turn_L(int & t)
{
int temp=d[t].r;d[t].r=d[temp].l;d[temp].l=t;
d[temp].size=d[t].size;update(t);t=temp;return ;
} void insert(int & t,const int x)
{
if(!t)
{
cnt++;t=cnt;d[t].size=d[t].num=;
d[t].val=x,d[t].key=rand();
return ;
}
d[t].size++;
if(d[t].val==x)d[t].num++;
else if(x<=d[t].val)
{
insert(d[t].l,x);
if(d[d[t].l].key<d[t].key)turn_R(t);
}
else
{
insert(d[t].r,x);
if(d[d[t].r].key<d[t].key)turn_L(t);
}
return ;
} void erase(int & t,const int x)
{
if(!t)return ;
if(d[t].val==x)
{
if(d[t].num>)
{
d[t].num--;d[t].size--;return ;
}
if(d[t].l*d[t].r==)t=d[t].l+d[t].r;
else if(d[d[t].l].key<d[d[t].r].key)
turn_R(t),erase(t,x);
else
turn_L(t),erase(t,x);
}
else if(x<=d[t].val)d[t].size--,erase(d[t].l,x);
else d[t].size--,erase(d[t].r,x);
return ;
} int get(const int & t,const int x)
{
if(t==)return ;
if(x<=d[d[t].l].size)return get(d[t].l,x);
else if(x>d[d[t].l].size+d[t].num)
return get(d[t].r,x-d[d[t].l].size-d[t].num);
return d[t].val;
} int upper_bound(const int & t,const int x,const int step)
{
if(t==)return ;
if(x<d[t].val)tmp=min(tmp,make_pair(d[t].val,step));
if(x>=d[t].val)upper_bound(d[t].r,x,step+d[d[d[t].r].l].size+d[t].num);
else upper_bound(d[t].l,x,step-d[d[d[t].l].r].size-d[d[t].l].num);
return tmp.second;
} int lower_bound(const int & t,const int x,const int step)
{
if(t==)return ;
if(x<=d[t].val)tmp=min(tmp,make_pair(d[t].val,step));
if(x>d[t].val)lower_bound(d[t].r,x,step+d[d[d[t].r].l].size+d[t].num);
else lower_bound(d[t].l,x,step-d[d[d[t].l].r].size-d[d[t].l].num);
return tmp.second;
} public:
void insert(const int x)
{
insert(root,x);
}
void erase(const int x)
{
erase(root,x);
}
int get(const int x)
{
return get(root,x);
}
int upper_bound(const int x)
{
tmp=make_pair(0x7fffffff,);
return upper_bound(root,x,d[d[root].l].size+);
}
int lower_bound(const int x)
{
tmp=make_pair(0x7fffffff,);
return lower_bound(root,x,d[d[root].l].size+);
}
}S; int n; int main()
{
int i,op,x; scanf("%d",&n); S.insert(0x7ffffff0);
for(i=;i<=n;++i)
{
scanf("%d%d",&op,&x);
if(op==)S.insert(x);
if(op==)S.erase(x);
if(op==)printf("%d\n",S.lower_bound(x));
if(op==)printf("%d\n",S.get(x));
if(op==)printf("%d\n",S.get(S.lower_bound(x)-));
if(op==)printf("%d\n",S.get(S.upper_bound(x)));
} return ;
}
[bzoj3224]普通平衡树[Treap]的更多相关文章
- [日常摸鱼]bzoj3224普通平衡树-Treap、Splay、01Trie、替罪羊树…
http://www.lydsy.com/JudgeOnline/problem.php?id=3224 经典的平衡树模板题-各种平衡树好像都可以(黄学长之前好像还用vector卡过了这题) 所以这篇 ...
- 算法模板——平衡树Treap 2
实现功能:同平衡树Treap 1(BZOJ3224 / tyvj1728) 这次的模板有了不少的改进,显然更加美观了,几乎每个部分都有了不少简化,尤其是删除部分,这个参照了hzwer神犇的写法,在此鸣 ...
- 【模板】平衡树——Treap和Splay
二叉搜索树($BST$):一棵带权二叉树,满足左子树的权值均小于根节点的权值,右子树的权值均大于根节点的权值.且左右子树也分别是二叉搜索树.(如下) $BST$的作用:维护一个有序数列,支持插入$x$ ...
- hiho #1325 : 平衡树·Treap
#1325 : 平衡树·Treap 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,我发现我们以前讲过的两个数据结构特别相似. 小Hi:你说的是哪两个啊? ...
- hiho一下103周 平衡树·Treap
平衡树·Treap 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,我发现我们以前讲过的两个数据结构特别相似. 小Hi:你说的是哪两个啊? 小Ho:就是二 ...
- 【山东省选2008】郁闷的小J 平衡树Treap
小J是国家图书馆的一位图书管理员,他的工作是管理一个巨大的书架.虽然他很能吃苦耐劳,但是由于这个书架十分巨大,所以他的工作效率总是很低,以致他面临着被解雇的危险,这也正是他所郁闷的.具体说来,书架由N ...
- Hihocoder 1325 平衡树·Treap(平衡树,Treap)
Hihocoder 1325 平衡树·Treap(平衡树,Treap) Description 小Ho:小Hi,我发现我们以前讲过的两个数据结构特别相似. 小Hi:你说的是哪两个啊? 小Ho:就是二叉 ...
- HihoCoder 1325 平衡树·Treap
HihoCoder 1325 平衡树·Treap 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,我发现我们以前讲过的两个数据结构特别相似. 小Hi:你说 ...
- 普通平衡树Treap(含旋转)学习笔记
浅谈普通平衡树Treap 平衡树,Treap=Tree+heap这是一个很形象的东西 我们要维护一棵树,它满足堆的性质和二叉查找树的性质(BST),这样的二叉树我们叫做平衡树 并且平衡树它的结构是接近 ...
随机推荐
- Tornado集成Apscheduler定时任务
熟悉Python的人可能都知道,Apscheduler是python里面一款非常优秀的任务调度框架,这个框架是从鼎鼎大名的Quartz移植而来. 之前有用过Flask版本的Apscheduler做定时 ...
- Django基于JWT实现微信小程序的登录和鉴权
什么是JWT? JWT,全称Json Web Token,用于作为JSON对象在各方之间安全地传输信息.该信息可以被验证和信任,因为它是数字签名的. 与Session的区别 一.Session是在服务 ...
- T4模板使用记录,生成Model、Service、Repository
自己目前在搭建一个.NET Core的框架,本来是打算使用前端做代码生成器直接生成到文件的,快做好了.感觉好像使用T4更方便一些,所以也就有了这篇文章~ 我还是有个问题没解决,就是我想生成每个类(接 ...
- ACM_“IP地址”普及(进制转换)
“IP地址”普及 Time Limit: 2000/1000ms (Java/Others) Problem Description: 大家都知道最近广财大校园网提速,现在就跟大家普及一下简单的互联网 ...
- 自定义View(9)使用Renderscript 渲染特效。
1.渲染脚本官网 https://developer.android.com/guide/topics/renderscript/compute 2.高斯模糊 ScriptIntrinsicBlur ...
- JS——事件冒泡与捕获
事件冒泡与事件捕获 1.冒泡:addEventListener("click",fn,false)或者addEventListener("click",fn): ...
- Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别? Java 中访问数据库的步骤 1)注册驱动: 2)建立连接: 3)创建Statement: 4)执 ...
- [Windows Server 2012] Filezilla安装方法
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:FileZ ...
- vim之补全2(完全个人定制版)
关于补全的方面要说的的确很多, 这里选择分为两个章叙述. 如果你想学vim, 你需要有很强的耐心, 如果你想锻炼这种耐心, 你可以试着先看完我之前的文章. 好了, 下面继续我们的vim补全吧. vim ...
- 【译】x86程序员手册07 - 2.5操作数选择
2.5 Operand Selection 操作数选择 An instruction can act on zero or more operands, which are the data mani ...