非旋转Treap——普通平衡树
扔板跑……
#include<bits/stdc++.h>
#define N 100010
#define mp make_pair
using namespace std;
typedef pair<int,int> par;
int n,x,rt;
struct Treap_Without_rotate{
int ls[N],rs[N],rnd[N],val[N],size[N],cnt;
inline void pushup(int x){size[x]=size[ls[x]]+size[rs[x]]+;}
par split(int k,int x){
if(!x)return mp(,k);int l=ls[k],r=rs[k];
if(x==size[l]){ls[k]=;pushup(k);return mp(l,k);}
if(x==size[l]+){rs[k]=;pushup(k);return mp(k,r);}
if(x<size[l]){
par tmp=split(l,x);
ls[k]=tmp.second;pushup(k);return mp(tmp.first,k);
}
par tmp=split(r,x-size[l]-);
rs[k]=tmp.first;pushup(k);return mp(k,tmp.second);
}
int merge(int x,int y){
if(x==||y==)return x+y;
if(rnd[x]<rnd[y]){rs[x]=merge(rs[x],y);pushup(x);return x;}
else{ls[y]=merge(x,ls[y]);pushup(y);return y;}
}
int queryrank(int x,int k){
int ans=,tmp=(int)1e9;
while(k){
if(x==val[k])tmp=min(tmp,ans+size[ls[k]]+);
if(x>val[k])ans+=size[ls[k]]+,k=rs[k];
else k=ls[k];
}
return tmp==(int)1e9?ans:tmp;
}
int find(int x,int k){
for(;;){
if(size[ls[k]]==x-)return val[k];
if(size[ls[k]]>x-)k=ls[k];
else x=x-size[ls[k]]-,k=rs[k];
}
}
int querypre(int x,int k){
int ans=-(int)1e9;
while(k){
if(val[k]<x)ans=max(ans,val[k]),k=rs[k];
else k=ls[k];
}return ans;
}
int querysub(int x,int k){
int ans=(int)1e9;
while(k){
if(val[k]>x)ans=min(ans,val[k]),k=ls[k];
else k=rs[k];
}return ans;
}
void ins(int x){
int k=queryrank(x,rt);par tmp=split(rt,k);
val[++cnt]=x;rnd[cnt]=rand();size[cnt]=;
rt=merge(tmp.first,cnt);rt=merge(rt,tmp.second);
}
void del(int x){
int k=queryrank(x,rt);par t1=split(rt,k),t2=split(t1.first,k-);
rt=merge(t2.first,t1.second);
}
}T;
inline int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
int main(){
n=read();srand();
for(int i=;i<=n;i++){
int opt=read(),x=read();
if(opt==)T.ins(x);
if(opt==)T.del(x);
if(opt==)printf("%d\n",T.queryrank(x,rt));
if(opt==)printf("%d\n",T.find(x,rt));
if(opt==)printf("%d\n",T.querypre(x,rt));
if(opt==)printf("%d\n",T.querysub(x,rt));
}
return ;
}
非旋转Treap——普通平衡树的更多相关文章
- BZOJ2300[HAOI2011]防线修建——非旋转treap+凸包(平衡树动态维护凸包)
题目描述 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上层现在还犹豫不决,到底该把哪些城市作为保护对象呢?又由于 ...
- BZOJ3223文艺平衡树——非旋转treap
此为平衡树系列第二道:文艺平衡树您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作: 翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 ...
- BZOJ3224普通平衡树——非旋转treap
题目: 此为平衡树系列第一道:普通平衡树您需要写一种数据结构,来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数, ...
- BZOJ3729Gty的游戏——阶梯博弈+巴什博弈+非旋转treap(平衡树动态维护dfs序)
题目描述 某一天gty在与他的妹子玩游戏.妹子提出一个游戏,给定一棵有根树,每个节点有一些石子,每次可以将不多于L的石子移动到父节点,询问将某个节点的子树中的石子移动到这个节点先手是否有必胜策略.gt ...
- 平衡树及笛卡尔树讲解(旋转treap,非旋转treap,splay,替罪羊树及可持久化)
在刷了许多道平衡树的题之后,对平衡树有了较为深入的理解,在这里和大家分享一下,希望对大家学习平衡树能有帮助. 平衡树有好多种,比如treap,splay,红黑树,STL中的set.在这里只介绍几种常用 ...
- 【bzoj3224】Tyvj 1728 普通平衡树 01Trie姿势+平衡树的四种姿势 :splay,旋转Treap,非旋转Treap,替罪羊树
直接上代码 正所谓 人傻自带大常数 平衡树的几种姿势: AVL Red&Black_Tree 码量爆炸,不常用:SBT 出于各种原因,不常用. 常用: Treap 旋转 基于旋转操作和随机数 ...
- [bzoj3196][Tyvj1730]二逼平衡树_树套树_位置线段树套非旋转Treap/树状数组套主席树/权值线段树套位置线段树
二逼平衡树 bzoj-3196 Tyvj-1730 题目大意:请写出一个维护序列的数据结构支持:查询给定权值排名:查询区间k小值:单点修改:查询区间内定值前驱:查询区间内定值后继. 注释:$1\le ...
- 4923: [Lydsy1706月赛]K小值查询 平衡树 非旋转Treap
国际惯例的题面:这种维护排序序列,严格大于的进行操作的题都很套路......我们按照[0,k],(k,2k],(2k,inf)分类讨论一下就好.显然第一个区间的不会变化,第二个区间的会被平移进第一个区 ...
- 关于非旋转treap的学习
非旋转treap的操作基于split和merge操作,其余操作和普通平衡树一样,复杂度保证方式与旋转treap差不多,都是基于一个随机的参数,这样构出的树树高为\(logn\) split 作用:将原 ...
随机推荐
- EM算法浅析(二)-算法初探
EM算法浅析,我准备写一个系列的文章: EM算法浅析(一)-问题引出 EM算法浅析(二)-算法初探 一.EM算法简介 在EM算法之一--问题引出中我们介绍了硬币的问题,给出了模型的目标函数,提到了这种 ...
- 【转】H5 - HTML5新增标签
下面分别是传统的div+css的页面布局方式 下面是HTML5布局方式: 是不是精简了很多呢 现在来说说图片中出现的标签: 结构标签:(块状元素) 有意义的div artical 标记定义一篇文章 ...
- 剑指offer:从头到尾打印链表
目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:从头到尾打印链表 题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 解题思路 首先题目实际给出的要求是返回ve ...
- 【EasyNetQ】- 使用SSL连接
EasyNetQ可以通过SSL连接.戈登·库尔特(Gordon Coulter)撰写的这本指南最初是针对一个提出的问题而写的. 首先,您必须仔细按照https://www.rabbitmq.com/s ...
- To Chromium之VS调试追踪
启动的code: for(;;){...WaitForWork()}base.dll!base::MessagePumpForUI::DoRunLoop ...
- capacilitys docker中的权限设置 privileged
capacilities是docker 中对docker权限设置的重要方面: http://blog.csdn.net/wangpengqi/article/details/9821227 上面这篇文 ...
- Java IO 流 体系结构图
- Java IO 之 RandomAccessFile 操作文件内容
RandomAccessFile类实现对文件内容的随机读写 文件内容的随机操作,重难点在于字符操作,具体查看API package org.zln.io.file; import java.io.IO ...
- 【bzoj1176】[Balkan2007]Mokia/【bzoj2683】简单题 CDQ分治+树状数组
bzoj1176 题目描述 维护一个W*W的矩阵,初始值均为S(题目描述有误,这里的S没有任何作用!).每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数 ...
- 【题解】SCOI2010幸运数字
最近在学习容斥相关,于是就看到了这个题.一开始以为是补集转化,但是观察一下马上发现不可行,好像直接做会比较容易一些.一个数满足要求的充要条件即为是一个幸运数字的倍数,那么容斥可以轻松搞定,只要枚举是一 ...