利用rand保持堆的特性

const int N=;

int ls[N],rs[N],v[N],p[N],cnt[N],siz[N];
// 权值 优先级
inline void update(int &k){
siz[k]=siz[ls[k]]+siz[rs[k]];}
inline void zig(int &k){//treap旋转上实际上是在根节点,不记录fa
int y=ls[k];// < 入
ls[k]=rs[y];
rs[y]=k; siz[y]=siz[k];
update(k);
k=y;//令k返回根节点
}
inline void zag(int &k){
int y=rs[k];
rs[y]=ls[y];
ls[y]=k; siz[y]=siz[k];
update(k);
k=y;
} inline void insert(int &k,int &val){
if(!k){
k=++idx;v[k]=val;p[k]=rand();
cnt[k]=siz[k]=;return;}
else ++siz[k]; if(val<v[k]){
insert(ls[k],val);
if(p[ls[k]]<p[k]) zig(k);}
else if(v[k]==val) ++cnt[k];
else{insert(rs[k],val);
if(p[rs[k]]<p[k]) zag(k);}
} inline void del(int &k,int &val){
//找到链节点或者数值>1即可直接不用再递归
if(val==v[k]){
if(<cnt[k]) --cnt[k],--siz[k];
//数值>1
else if(!ls[k]||!rs[k]) k=ls[k]+rs[k];
//链结点
//两个非空节点
else if(p[ls[k]]<p[rs[k]]) zig(k),del(k,val);
else zag(k),del(k,val);
return;
}
--siz[k];
if(val<v[k]) del(ls[k],val);
else del(rs[k],val);
}
//前驱后继
inline int pre(int &val){
int k=rt,ans=-inf;
while(k){
if(v[k]<=val) ans=v[k],k=rs[k];
else k=ls[k];}
return ans;}
inline int beh(int &val){
int k=rt,ans=-inf;
while(k){
if(val<=v[k]) ans=v[k],k=ls[k];
else k=rs[k];}
return ans;}
//
inline int queryKth(int x){
int k=rt;
while(k){
if(siz[ls[k]]<x&&x<=siz[ls[k]]+cnt[k]) return v[k];
if(x<=siz[ls[k]]) k=ls[k];
else k-=siz[ls[k]]+cnt[k],k=rs[k];}
return ;
}
inline int queryrank(int &val){
int k=rt,res=;
while(k){
if(v[k]==val) return res+siz[ls[k]]+;
else if(val<v[k]) k=ls[k];
else res+=siz[ls[k]]+cnt[k],k=rs[k];}
return res;
}

treap基本操作的更多相关文章

  1. 数据结构之Treap

    1. 概述 同splay tree一样,treap也是一个平衡二叉树,不过Treap会记录一个额外的数据,即优先级.Treap在以关键码构成二叉搜索树的同时,还按优先级来满足堆的性质.因而,Treap ...

  2. BZOJ3196 Tyvj1730 二逼平衡树 【树套树】 【线段树套treap】

    BZOJ3196 Tyvj1730 二逼平衡树 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名 ...

  3. Treap基本用法总结

    Treap=Tree+Heap  起名的人非常有才 Treap是啥? 一棵二叉搜索树可能退化成链,那样各种操作的效率都比较低 于是可爱的Treap在每个节点原先值v的基础上加了一个随机数rnd,树的形 ...

  4. c++之路进阶——codevs4543(普通平衡树)

    4543 普通平衡树  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master       题目描述 Description 这是一道水题 顺便祝愿LEZ和ZQQ 省 ...

  5. Treap入门(转自NOCOW)

    Treap 来自NOCOW Treap,就是有另一个随机数满足堆的性质的二叉搜索树,其结构相当于以随机顺序插入的二叉搜索树.其基本操作的期望复杂度为O(log n). 其特点是实现简单,效率高于伸展树 ...

  6. Treap树的基础知识

    原文 其它较好的的介绍:堆排序  AVL树 树堆,在数据结构中也称Treap(事实上在国内OI界常称为Traep,与之同理的还有"Tarjan神犇发明的"Spaly),是指有一个随 ...

  7. 三大平衡树(Treap + Splay + SBT)总结+模板[转]

    Treap树 核心是 利用随机数的二叉排序树的各种操作复杂度平均为O(lgn) Treap模板: #include <cstdio> #include <cstring> #i ...

  8. 初识Treap

    Treap,简单的来说就是Tree+Heap,是一颗平衡树,每个节点有两个信息:1.key:当前节点的关键字 :2.fix:当前节点优先级.key满足二叉排序数的性质,即左儿子都比当前节点小,右儿子都 ...

  9. 查找——图文翔解Treap(树堆)

    之前我们讲到二叉搜索树,从二叉搜索树到2-3树到红黑树到B-树. 二叉搜索树的主要问题就是其结构与数据相关,树的深度可能会非常大,Treap树就是一种解决二叉搜索树可能深度过大的还有一种数据结构. T ...

随机推荐

  1. 定时器同步+触发三ADC采样+输出6路PWM波

    为了熟悉定时器定时器和ADC 用STM32F407DIS做了一个简单的工程: 通过高级定时器TIM1溢出更新时间作为触发输出信号(TRGO),触发TIM8开始计数: 同时TIM1的通道1.2.3以及分 ...

  2. 粉红猪小妹peppa pig中英文版209集+218本绘本+音频

    1.avi格式英文版包括,第一季52集有外挂英文字幕,第二季53集外挂英文字幕,第三季52集有外挂同步英文字幕,第四季1到39集有英文字幕,40-52无字幕.另有4季音频(每集都是单独的音频文件,方便 ...

  3. js jquery数组去重

    数组去重建议直接使用jquery的 $.unique(arr);方法,此外比较好的方法是本文中的unique3方法比较快用了一个hash表,就是所谓的空间换时间.本文还提供了很多其他写法,都是大同小异 ...

  4. 洛谷P1848 书架

    好,我一直以为书架是splay,然后发现还有个优化DP的书架.妃的书架 蓝书和PPT上面都讲了,应该比较经典吧. 题意: 有n个物品,每个都有宽,高. 把它们分成若干段,使得每段的最大值的总和最小.且 ...

  5. Nlog 简单的快速攻略

    废话不多说直接进入正题. 1.在项目中加入Nlog的应用 安装后会出现两个文件 2.我们打开Nlog.config配置文件设置日志记录 <?xml version="1.0" ...

  6. ImageMagick:获取一行文字的宽与高

    double *fm = MagickQueryFontMetrics(mw_temp, dw_wand, text_utf8); //获取文字在指定字体和字号下的宽度和高度 double textW ...

  7. 关于PHP的 PHP-FPM进程CPU 100%的一些原因分析和解决方案

    之前碰到过php-fpmCPU高达80%-90%,特此记录下 1. 查看是否是硬件问题 方式:top  命令 主要查看:load average(平均负载),这是一个4核8G内存的服务器 1分钟平均负 ...

  8. ideaJ+maven+javaweb实践: sevlet实现upload&download,javaIO代码

    因为工作的机器不让拷贝出来也不让发邮件出来也不让访问外网,所以文件两个PC挪来挪去很麻烦. 决定写一个网页,只有upload和download ideaJ,maven,java,tomcat 写一个j ...

  9. node.js小案例_留言板

    一.前言 通过这个案例复习: 1.node.js中模板引擎的使用 2.node.js中的页面跳转和重定向 二.主要内容 1.案列演示:  2.案列源码:https://github.com/45612 ...

  10. Harbor 使用 Helm 一键安装

    安装 Harbor Harbor 支持多种安装方式,源码目录下面默认有一个安装脚本(make/install.sh),采用 docker-compose 的形式运行 Harbor 各个组件,和前面的课 ...