学了一下,好像明白了(背下来了)

不想写main函数了

PS:这个比treap好写(私以为)

#include<bits/stdc++.h>
using namespace std;
int tot,root;
struct treap{
	int v,ch[2],rnd;
}t[N];
void split(int now,int k,int &x,int &y){//将now分为x,y两棵子树(可以为空)
	if(!now){
		x=y=0;
		return;
	}
	if(t[now].val<=k)
		x=now,split(t[now].ch[1],k,t[now].ch[1],y);//now即为左子树根,递归处理右子树,此时x的左子树为now分裂出的小于等于k的子树的左子树,还要找到其右子树,即为now右儿子分裂出的小于子树
	else //即可解释上行的函数调用,修改了now的右子树
		y=now,spilt(t[now].ch[0],k,x,t[now].ch[0]);
}
int merge(int x,int y){
	if(!x||!y)return x+y;
	update(x),update(y);
	if(t[x].rnd<t[y].rnd){
		t[x].ch[1]=merge(t[x].ch[1],y);
		update(x);
		return x;
	}
	else {
		t[y].ch[0]=merge(x,t[y].ch[0]);
		update(y);
		return y;
	}
}
int neww(int v){
	t[++tot].size=1;
	t[tot].val=v;
	t[tot].rnd=rand();
	return tot;
}
int kth(int now,int k)// 查询排名
{
    while(1)
    {
        if(k<=t[t[now].ch[0]].size)
            now=t[now].ch[0];// 在左子树中,且数量小于左子树的大小,迭代寻找
        else if(k==t[t[now].ch[0]].size+1)
            return now;// 找到了
        else
            k-=t[t[now].ch[0]].size+1,now=t[now].ch[1];// 去右子树找
    }
}
/*插入v
	split(root,v,x,y);
	root=merge(merge(x,neww(v)),y);
*/
/*
	split(root,v,a,b);
	split(a,v-1,a,d);
	d=merge(t[d].ch[0],t[d].ch[1]);这样写是因为可以不维护size(指元素数量)
	root=merge(merge(a,d),b);
*/
/*查询rank
	split(root,a-1,x,y);
	printf("%d\n",t[x].size+1);
	root=merge(x,y);
*/
/*查值
	printf("%d\n",t[kth(root,a)].val);
*/
/*找前驱
	split(root,a-1,x,y);
	printf("%d\n",t[kth(x,siz[x])].val);
	root=merge(x,y);
*/
/*找后继
	split(root,a,x,y);
	printf("%d\n",t[kth(y,1)].val);
	root=merge(x,y);
*/

int main(){

	return 0;
}

  

fhq treap的更多相关文章

  1. fhq treap最终模板

    新学习了fhq treap,厉害了 先贴个神犇的版, from memphis /* Treap[Merge,Split] by Memphis */ #include<cstdio> # ...

  2. NOI 2002 营业额统计 (splay or fhq treap)

    Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每 ...

  3. 【POJ2761】【fhq treap】A Simple Problem with Integers

    Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. On ...

  4. 【fhq Treap】bzoj1500(听说此题多码上几遍就能不惧任何平衡树题)

    1500: [NOI2005]维修数列 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 15112  Solved: 4996[Submit][Statu ...

  5. 「FHQ Treap」学习笔记

    话说天下大事,就像fhq treap —— 分久必合,合久必分 简单讲一讲.非旋treap主要依靠分裂和合并来实现操作.(递归,不维护fa不维护cnt) 合并的前提是两棵树的权值满足一边的最大的比另一 ...

  6. FHQ Treap摘要

    原理 以随机数维护平衡,使树高期望为logn级别 不依靠旋转,只有两个核心操作merge(合并)和split(拆分) 因此可持久化 先介绍变量 ; int n; struct Node { int v ...

  7. FHQ Treap小结(神级数据结构!)

    首先说一下, 这个东西可以搞一切bst,treap,splay所能搞的东西 pre 今天心血来潮, 想搞一搞平衡树, 先百度了一下平衡树,发现正宗的平衡树写法应该是在二叉查找树的基础上加什么左左左右右 ...

  8. 在平衡树的海洋中畅游(四)——FHQ Treap

    Preface 关于那些比较基础的平衡树我想我之前已经介绍的已经挺多了. 但是像Treap,Splay这样的旋转平衡树码亮太大,而像替罪羊树这样的重量平衡树却没有什么实际意义. 然而类似于SBT,AV ...

  9. 浅谈fhq treap

    一.简介 fhq treap 与一般的treap主要有3点不同 1.不用旋转 2.以merge和split为核心操作,通过它们的组合实现平衡树的所有操作 3.可以可持久化 二.核心操作 代码中val表 ...

  10. fhq treap 学习笔记

    序 今天心血来潮,来学习一下fhq treap(其实原因是本校有个OIer名叫fh,当然不是我) 简介 fhq treap 学名好像是"非旋转式treap及可持久化"...听上去怪 ...

随机推荐

  1. [十二省联考2019]D1T2字符串问题

    嘟嘟嘟 省选Day1真是重大失误,T2连暴力都没时间写. 上周五重新答了遍Day1,竟然搞了187分吼吼吼吼. T2按40分写的暴力,结果竟然得了60分. 稍微说一下暴力吧:预处理哈希,对于一组支配关 ...

  2. [C#6] 8-异常增强

    0. 目录 C#6 新增特性目录 1. 在catch和finally块中使用await 在C#5中引入一对关键字await/async,用来支持新的异步编程模型,使的C#的异步编程模型进一步的简化(A ...

  3. 石家庄地铁系统开发(java web版)(一)

    今天所完成的任务: 在Mysql数据库中创建了sjzsubstop表和sjzsubway表 sjzsubstop表用于录入所有站点名称和与之对应的stopid(作为主码) sjzsubway表用于录入 ...

  4. Selenium WebDriver原理(一):Selenium WebDriver 是怎么工作的?

    首先我们来看一个经典的例子: 搭出租车 在出租车驾驶中,通常有3个角色: 乘客 : 他告诉出租车司机他想去哪里以及如何到达那里 对出租车司机说: 1.去阳光棕榈园东门 2.从这里转左 3.然后直行 2 ...

  5. 转:eclipse 设置Java快捷键补全

    1.打开Eclipse,点击" Window - Preferences"; 2. 在目录树上选择"Java——Editor——Content Assist", ...

  6. PHP加密解密函数(带有效期,过了有效期也解不了)

    转的,原来应该是discuz中弄的 <?php //加解密函数 //此函数的厉害之处在于可以在指定时间内加密还原字符串,超时无法还原. //这样我们就可以拿此函数来做很多用途了,比如:单点登录的 ...

  7. Python进阶10---魔术方法*

    特殊属性 查看属性 #animal.py class Animal: x = 123 def __init__(self,name): self._name = name self.__age = 1 ...

  8. Linux查看用户所属用户组

    1.查看当前用户所属用户组 [oracle@serverhl ~]$ groups oinstall dba 2.查看<user1>, <user2> 和 <user3& ...

  9. Power BI For Competition

    It's traditional report design, I'm insufficient for designing that if had a designer to help me wil ...

  10. Java技术栈思维导图

    Java技术栈思维导图 Java IO流体系 设计模式