博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
平衡树 fhqTreap
阅读量:6228 次
发布时间:2019-06-21

本文共 981 字,大约阅读时间需要 3 分钟。

//Treap fhq版(不旋转) //所有操作依靠split()(分离)和merge()(合并)完成 //可支持区间操作和可持久化 比普通Treap更通用 //所有Treap中序遍历均为递增序列 #include
#include
#include
#include
#include
#include
#include
using namespace std;int n,cnt,size,root,x,y,z;//x为小Treap的根节点 y为中Treap的根节点 z为大Treap的根节点 root为总Treap的根节点 int son[100001][2],siz[100001],val[100001],rd[100001];//左右儿子,子树大小+自己大小,点值,随机权值 int new_node(int m)//建立新节点 { siz[++size]=1; val[size]=m; rd[size]=rand(); return size;}void update(int now){ siz[now]=siz[son[now][0]]+siz[son[now][1]]+1;}void split(int now,int k,int &a,int &b){ if(!now) { a=b=0; return; } if(val[now]<=k) a=now,split(son[now][1],k,son[now][1],b); //将此节点及其左子树接到小Treap上,并遍历此节点的右节点 else b=now,split(son[now][0],k,a,son[now][0]); //将此节点及其右子树接到大Treap上,并遍历此节点的左节点 update(now);}int merge(int a,int b){ if(!a||!b) return a+b; if(rd[a]

 

转载于:https://www.cnblogs.com/water-radish/p/9280878.html

你可能感兴趣的文章
Matlab调用C程序 分类: Matlab c/c...
查看>>
vue+typescript入门学习
查看>>
arpg网页游戏之地图(三)
查看>>
ExecuteScalar 返回值问题
查看>>
python - 自动化测试框架 - 测试报告
查看>>
多线程的那点儿事(基础篇)
查看>>
win10安装MarkdownPad 2报错This view has crashed的处理及md简单语法
查看>>
RESTful API测试工具
查看>>
Python 安装cx_Oracle模块折腾笔记
查看>>
wvs_patcher批量测试网站
查看>>
【转】Lua编程规范
查看>>
P4779 【模板】单源最短路径(标准版)
查看>>
二三维联动之MapControl与SceneControl的联动
查看>>
cocos2dx ScrollView 测试二 自定义Item和boundingBox
查看>>
洛谷P4175 网络管理
查看>>
js监听input输入字符变化
查看>>
tcpdump详解
查看>>
JAVA基础:ArrayList和LinkedList区别
查看>>
不仅仅完成功能,避免无效成本浪费
查看>>
[转载]SCSF 系列:Smart Client Software Factory 中 MVP 模式最佳实践
查看>>