[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),这样的二叉树我们叫做平衡树 并且平衡树它的结构是接近 ...
随机推荐
- Tyvj 1068 巧用扩展KMP
Tyvj1068 给定两个长度为2*10^5的字符串为A和B 求B在A中匹配后,任意匹配长度的位置个数. KMP算法大家应该烂熟于心才好,这样碰到这样的题才能灵活运用.有时做题真的需要一点灵感.首先, ...
- P1452 Beauty Contest
传送门 求凸包周长,用旋转卡壳,具体可见yyb大佬的博客 顺便一提这题暴力+随机化也能过 暴力代码 //minamoto #include<bits/stdc++.h> #define r ...
- Java数组去重(利用数组,不借助集合)
今天有个同学问我说老师,Java里边数组怎么去重,在不借助List集合的情况下,最后呢我整理了一下,打算发一篇博文,希望能帮助到有用的人,大佬绕过 public static void arrUniq ...
- 分享两篇关于ActionBar样式设置的博客
http://www.open-open.com/lib/view/open1373981182669.html http://blog.csdn.net/xyz_lmn/article/detail ...
- 345 Reverse Vowels of a String 反转字符串中的元音字母
编写一个函数,以字符串作为输入,反转该字符串中的元音字母.示例 1:给定 s = "hello", 返回 "holle".示例 2:给定 s = "l ...
- IOS开发之Swift学习笔记
1.因为存储属性要求初始化,我们可以使用lazy修饰符来延迟初始化.
- Hadoop基础(一)
Hadoop 基础知识 大数据已经火了很长很长时间了,从最开始是个公司都说自己公司的数据量很大,我们在搞大数据.到现在大数据真的已经非常成熟并且已经在逐渐的影响我们的生产生活.你可能听过支付宝的金融大 ...
- Laravel5.1学习笔记19 EloquentORM 入门
Eloquent:入门 简介 定义模型(model) Eloquent 模型规范 取出多个模型 取出单个模型 / 集合 取出集合 插入更新模型 基本插入 基本更新 大批量赋值 删除模型 软删除 查询 ...
- ionic中遇到的一些问题和坑
接触ionic有一段时间了,一路上踩了不少坑.大部分都记录下来了,分享给大家,可以少走很多弯路 1,ng-init不能在body里面初始化,可以在一个段落里面初始化<div ng-init> ...
- java编码终极探秘
首先要明白,java中string字符串都是unicode码保存的,只不过显示的时候会根据一定的规则,比如GBK或者是UTF-8去对照表中查找进行显示. 之所以会乱码就是因为使用错了编码方式. 数据是 ...