[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),这样的二叉树我们叫做平衡树 并且平衡树它的结构是接近 ...
随机推荐
- 9.2NOIP模拟题
9.2 NOIP模拟 题目名称 “与” 小象涂色 行动!行动! 输入文件 and.in elephant.in move.in 输出文件 and.out elephant.in move.in 时间限 ...
- A Few Words on Callbacks and Asynchronous Mechanism In Javascript
It is said that the one of the most routine work a javascript programmer do is writing codes like &q ...
- 【知识总结】线性筛_杜教筛_Min25筛
首先感谢又强又嘴又可爱脸还筋道的国家集训队(Upd: WC2019 进候选队,CTS2019 不幸 rk6 退队)神仙瓜 ( jumpmelon ) 给我讲解这三种筛法~~ 由于博主的鸽子属性,这篇博 ...
- day03_12/13/2016_bean属性的设置之构造器方式注入
- 海量文本信息查Top-k
问题描述: 有1千万条短信,一条一行,有重复.在5分钟之内,找出重复出现的前10条. 方案一: 1.分组进行边扫描边建散列表.建立哈希表,使用头,尾和中间随便两个字节作为Hash Code, 插入到H ...
- fresh_bank、、
最近新学习了一个bank系统来和大家分享一下,新人求罩! 破索式之_链子枪_ 废话不多说了直接本主题 如果我们要写出bank系统,就要先考虑这个问题:总共需要几个类? 既然是银行系统,那么必不可少的就 ...
- [ SCOI 2009 ] 最长距离
\(\\\) \(Description\) 一个\(N\times M\)的网格图中有一些坏点,图是四联通的. 你至多可以拿走\(K\)个坏点,求拿走后联通的点对中欧几里得距离最大是多少. \(N, ...
- drupal-使用hook_preprocess_field在paragraph的accordion中添加自定义数据
描述:我的accordion类型原先只有两个字段,分别是title和content.显示在页面上会默认隐藏其内容,点击“+”会显示内容.然而现在有一个新需求,就是加一个开关使编辑内容者可以选择默认“展 ...
- html5——css选择器
复习 div>p: 子代 div+p:div后面相邻的第一个p div~p: div后面所有的兄弟p 属性选择器 标志:[]:区别于id选择器:#,区别于类名选择器:. 特殊符号:^:开头 ...
- win10 打开chm文件内容空白如何解决
win10 打开chm文件内容空白如何解决 .CHM文件是非常常见的帮助文件格式.由于其便携性,很多小说或杂志也会采用chm格式.win7/win8.1/win10系统,由于采用了UAC,致使原本在x ...