增加Split(分裂),Merge(合并)操作,非常好写,时间也不比普通treap慢什么。

 #include<bits/stdc++.h>
using namespace std;
struct node
{
int l,r;int size,rnd,v;
}t[*];
int cnt,rt[];
void update(int k)
{
t[k].size=t[t[k].l].size+t[t[k].r].size+;
}
void newnode(int &k,int x)
{
t[k=++cnt].v=x;t[k].size=;t[k].rnd=rand();
}
int merge(int a,int b)
{
if(!a||!b)return a+b;
if(t[a].rnd>t[b].rnd)
{
int p=++cnt;t[p]=t[a];
t[p].r=merge(t[p].r,b);
update(p);
return p;
}
else
{
int p=++cnt;t[p]=t[b];
t[p].l=merge(a,t[p].l);
update(p);
return p;
}
}
void split(int now,int k,int &x,int &y)
{
if(!now)x=y=;
else
{
if(t[now].v<=k)
{
x=++cnt;t[x]=t[now];
split(t[x].r,k,t[x].r,y);
update(x);
}
else
{
y=++cnt;t[y]=t[now];
split(t[y].l,k,x,t[y].l);
update(y);
}
}
}
void Delete(int &root,int w)
{
int x=,y=,z=;
split(root,w,x,z);
split(x,w-,x,y);
y=merge(t[y].l,t[y].r);
root=merge(merge(x,y),z);
}
void Insert(int &root,int w)
{
int x=,y=,z=;
split(root,w,x,y);
newnode(z,w);
root=merge(merge(x,z),y);
}
int getval(int k,int w)
{
if(w==t[t[k].l].size+)return t[k].v;
else if(w<=t[t[k].l].size)return getval(t[k].l,w);
else return getval(t[k].r,w-t[t[k].l].size-);
}
int getkth(int &root,int w)
{
int x,y;
split(root,w-,x,y);
int ans=t[x].size+;
root=merge(x,y);
return ans;
}
int getpre(int &root,int w)
{
int x,y,k,ans;
split(root,w-,x,y);
if(!x)return -;
k=t[x].size;
ans=getval(x,k);
root=merge(x,y);
return ans;
}
int getnex(int &root,int w)
{
int x,y,ans;
split(root,w,x,y);
if(!y)return ;
else ans=getval(y,);
root=merge(x,y);
return ans;
}
int main()
{
int n,f,w,tim;
scanf("%d",&n);
for(int i=;i<=n;++i)
{
scanf("%d%d%d",&tim,&f,&w);
rt[i]=rt[tim];
if(f==)Insert(rt[i],w);
else if(f==)Delete(rt[i],w);
else if(f==)printf("%d\n",getkth(rt[i],w));
else if(f==)printf("%d\n",getval(rt[i],w));
else if(f==)printf("%d\n",getpre(rt[i],w));
else printf("%d\n",getnex(rt[i],w));
}
return ;
}

范浩强treap 普通平衡树的更多相关文章

  1. 范浩强treap——可持久化

    当平衡树需要可持久化的时候,意味着我们需要访问以前的某个时间点的平衡树,就要保持以前的树形态不变,新建一个时间戳,构建一棵新的树. 如果用以前的旋转treap可能就不方便做到(又要打时间戳,又要新建节 ...

  2. 旷视6号员工范浩强:高二开始实习,“兼职”读姚班,25岁在CVPR斩获第四个世界第一...

    初来乍到,这个人说话容易让人觉得"狂". "我们将比赛结果提交上去,果不其然,是第一名的成绩."当他说出这句话的时候,表情没有一丝波澜,仿佛一切顺理成章. 他说 ...

  3. 挂羊头卖狗肉蓄意欺骗读者——谭浩强《C程序设计(第四版)》中所谓的“按照C99”(二)

    挂羊头卖狗肉蓄意欺骗读者——谭浩强<C程序设计(第四版)>中所谓的“按照C99”(二) 在<谭C>p4:“本书的叙述以C99标准为依据”,下面从C89到C99的主要变化方面来看 ...

  4. C语言学习笔记---谭浩强

    前段时间有机会去面试了一次,真是备受“打击”(其实是启发),总的来说就是让我意识到了学习工具和学习技术的区别.所以最近在看一些数据结构和算法,操作系统,python中的并行编程与异步编程等东西.然而数 ...

  5. Hihocoder 1325 平衡树·Treap(平衡树,Treap)

    Hihocoder 1325 平衡树·Treap(平衡树,Treap) Description 小Ho:小Hi,我发现我们以前讲过的两个数据结构特别相似. 小Hi:你说的是哪两个啊? 小Ho:就是二叉 ...

  6. C指针笔试题,蛋疼的多重指针运算,谭浩强的阴影

    对指针的概念清晰的话,做这种题只要耐心就行,然而看这种题就烦(被同学吐槽为谭浩强的阴影……草泥马这种C风格题有意义吗?出题人脑子被门夹了?而且C++11都不支持字面值字符串直接转换成char*了.好吧 ...

  7. c++面向对象程序设计 课后题 答案 谭浩强 第四章

    c++面向对象程序设计课后题答案 谭浩强 第四章 1: #include <iostream> using namespace std; class Complex {public: Co ...

  8. c++面向对象程序设计 谭浩强 第三章答案

    2: #include <iostream> using namespace std; class Date {public: Date(int,int,int); Date(int,in ...

  9. c++面向对象程序设计 谭浩强 第二章答案

    类体内定义成员函数 #include <iostream> using namespace std; class Time { public: void set_time(); void ...

随机推荐

  1. 【BZOJ】4766: 文艺计算姬

    [题目]给定两边节点数为n和m的完全二分图,求生成树数取模给定的p.n,m,p<=10^18. [算法]生成树计数(矩阵树定理) [题解]参考自 [bzoj4766]文艺计算姬 by WerKe ...

  2. array_unique() 去重复

    array_unique() 定义和用法 array_unique() 函数移除数组中的重复的值,并返回结果数组. 当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除. 返回的数组中键名不变 ...

  3. Linux线程编程之生产者消费者问题【转】

    转自:http://www.cnblogs.com/clover-toeic/p/4029269.html 前言 本文基于顺序循环队列,给出Linux生产者/消费者问题的多线程示例,并讨论编程时需要注 ...

  4. SQLite3使用详解

    sqlite常量的定义(SQLite3返回值的意思): SQLITE_OK           = 0;  返回成功 SQLITE_ERROR        = 1;  SQL错误或错误的数据库 SQ ...

  5. RTC

    RTC的英文全称是Real-Time Clock,翻译过来是实时时钟芯片. RTC是PC主板上的晶振及相关电路组成的时钟电路的生成脉冲主板上的晶振及相关电路组成的时钟电路的生成脉冲,,RTC经过825 ...

  6. 64_p2

    perl-Class-XSAccessor-1.19-10.fc26.x86_64.rpm 12-Feb-2017 15:12 48098 perl-Clipboard-0.13-16.fc26.no ...

  7. 设计模式之笔记--解释器模式(Interpreter)

    解释器模式(Interpreter) 定义 解释器模式(Interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 类图 描述 Expr ...

  8. angular项目中使用angular-material2

    Step 1: Install Angular Material and Angular CDK npm install --save @angular/material @angular/cdk n ...

  9. u-boot启动第一阶段

    目标板:2440开发板 u-boot启动的第一阶段是在文件start.S中完成的,这个过程对不同硬件平台的设置是不同的.下面进入start.S _start: b reset //跳转到reset / ...

  10. fsarchiver创建系统镜像(dd命令也可以)

    fsarchiver简介 fsarchiver可以将整个文件系统的内容保存成一个压缩形式的归档文件,包含文件系统本身.所以用来做系统镜像是一个不错的选择,一旦系统崩溃但可以进入救援模式,我们就可以使用 ...