解题关键:无旋treap模板。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctime>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define maxn 500001
using namespace std;
typedef long long ll;
int size[maxn],ch[maxn][],rnd[maxn],val[maxn];
int ncnt,n,x,y,z,rt; inline void pushup(int x){
size[x]=+size[ch[x][]]+size[ch[x][]];
} inline int new_node(int x){
size[++ncnt]=;
val[ncnt]=x;
rnd[ncnt]=rand();
return ncnt;
}
//核心
int merge(int A,int B){
if(!A||!B) return A+B;
if(rnd[A]<rnd[B]){ch[A][]=merge(ch[A][],B);
pushup(A);return A;}
else {ch[B][]=merge(A,ch[B][]);
pushup(B);return B;}
}
//权值分裂
void split(int now,int k,int &x,int &y){
if(!now) x=y=;
else{
if(val[now]<=k) x=now,split(ch[now][],k,ch[now][],y);
else y=now,split(ch[now][],k,x,ch[now][]);
pushup(now);
}
}
//排名分裂
void split_2(int now,int k,int &x,int &y){
if(!now) x=y=;
else{
if(k<=size[ch[now][]]){y=now;split(ch[now][],k,x,ch[now][]);}
else{x=now;split(ch[now][],k-size[ch[now][]]-,ch[now][],y);}
pushup(now);
}
} void insert(int &k,int a){
split(k,a,x,y);
k=merge(merge(x,new_node(a)),y);
}
//会浪费空间,没有回收节点
void del(int &k,int a){
split(k,a,x,z);
split(x,a-,x,y);
y=merge(ch[y][],ch[y][]);
k=merge(merge(x,y),z);
} int rnk(int &k,int a){
split(k,a-,x,y);
int res=size[x]+;
k=merge(x,y);
return res;
} int kth(int now,int k){
while(){
if(k<=size[ch[now][]]) now=ch[now][];
else if(k==size[ch[now][]]+) return val[now];
else k-=size[ch[now][]]+,now=ch[now][];
}
} int pred(int &k,int a){
split(k,a-,x,y);
int res=kth(x,size[x]);
k=merge(x,y);
return res;
} int succ(int &k,int a){
split(k,a,x,y);
int res=kth(y,);
k=merge(x,y);
return res;
} int main(){
srand(time());
scanf("%d",&n);
for(int i=,opt,a;i<=n;i++){
scanf("%d%d",&opt,&a);
switch(opt){
case :insert(rt,a);break;
case :del(rt,a);break;
case :printf("%d\n",rnk(rt,a));break;
case :printf("%d\n",kth(rt,a));break;
case :printf("%d\n",pred(rt,a));break;
case :printf("%d\n",succ(rt,a));break;
}
}
return ;
}

[luogu3369]普通平衡树(fhq-treap模板)的更多相关文章

  1. 2021.12.08 平衡树——FHQ Treap

    2021.12.08 平衡树--FHQ Treap http://www.yhzq-blog.cc/fhqtreapzongjie/ https://www.cnblogs.com/zwfymqz/p ...

  2. Luogu P3835 【模板】可持久化平衡树(fhq Treap)

    P3835 [模板]可持久化平衡树 题意 题目背景 本题为题目普通平衡树的可持久化加强版. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作(对于各个以往的历史版本 ...

  3. P3391 【模板】文艺平衡树FHQ treap

    P3391 [模板]文艺平衡树(Splay) 题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转 ...

  4. 洛谷.3369.[模板]普通平衡树(fhq Treap)

    题目链接 第一次(2017.12.24): #include<cstdio> #include<cctype> #include<algorithm> //#def ...

  5. 洛谷.3835.[模板]可持久化平衡树(fhq treap)

    题目链接 对每次Merge(),Split()时产生的节点都复制一份(其实和主席树一样).时间空间复杂度都为O(qlogq).(应该更大些 因为rand()?内存真的爆炸..) 对于无修改的操作实际上 ...

  6. BZOJ 3224 普通平衡树(Treap模板题)

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 14301  Solved: 6208 [Submit][ ...

  7. [luogu3369]普通平衡树(替罪羊树模板)

    解题关键:由于需要根据平衡进行重建,所以不能进行去重,否则无法保证平衡性. #include<cstdio> #include<cstring> #include<alg ...

  8. [luogu3369] 普通平衡树(splay模板)

    题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1.插入 xx 数 2.删除 xx 数(若有多个相同的数,因只删除一个) 3.查询 xx 数的排名(排名定义为比 ...

  9. 简析平衡树(四)——FHQ Treap

    前言 好久没码过平衡树了! 这次在闪指导的指导下学会了\(FHQ\ Treap\),一方面是因为听说它可以可持久化,另一方面则是因为听说它是真的好写. 简介 \(FHQ\ Treap\),又称作非旋\ ...

  10. FHQ Treap及其可持久化与朝鲜树式重构

    FHQ Treap,又称无旋treap,一种不基于旋转机制的平衡树,可支持所有有旋treap.splay等能支持的操作(只有在LCT中会比splay复杂度多一个log).最重要的是,它是OI中唯一一种 ...

随机推荐

  1. opencv roi resize 会导致内存拷贝产生子图像

    opencv roi区域 resize之后,roi的引用已不是原图的引用,而是内存拷贝产生的子图像. http://blog.csdn.net/qianqing13579/article/detail ...

  2. [EMWIN]FRAMEWIN 与 WINDOW 的使用注意

    1.对于window控件,选中这类型控件的时候直接选中对应句柄即可: WM_InvalidateWindow(hWin); WM_SelectWindow(hWin); WM_CreateTimer( ...

  3. shfileoperation 删除文件 FileDelete(CString strName)

    From:http://blog.csdn.net/lvwx369/article/details/41440883 注意:其中namePath 为全局变量 Cstring namePath; BOO ...

  4. LeetCode Design Log Storage System

    原题链接在这里:https://leetcode.com/problems/design-log-storage-system/description/ 题目: You are given sever ...

  5. python 不同版本下载资源

    Unofficial Windows Binaries for Python Extension Packages by Christoph Gohlke, Laboratory for Fluore ...

  6. 3 循环语句——《Swift3.0从入门到出家》

    3 循环语句 当一段代码被多次重复利用的使用我们就使用循环 swift提供了三种形式的循环语句 1.while 循环 2.repeat — while 循环 3.for — in 循环 while 循 ...

  7. RESTful处理JSON

    @RequestMapping(value = "/dblist", method = RequestMethod.GET) @ResponseBody public Map< ...

  8. lnmp centos7 memcache服务器端 和 memcache memcached扩展的安装

    在项目开发的时候有用到memcache,自己在本地需要搭建一个memcache环境,用于开发和测试; wget http://www.memcached.org/files/memcached-1.5 ...

  9. (转)WebApi发送HTML表单数据:文件上传与多部分MIME

    5.3 Sending HTML Form Data5.3 发送HTML表单数据(2) 本文引自:http://www.cnblogs.com/r01cn/archive/2012/12/20/282 ...

  10. 【转】JMeter基础之——一个简单的性能测试

    上一节中,我们了解了jmeter的一此主要元件,那么这些元件如何使用到性能测试中呢.这一节创建一个简单的测试计划来使用这些元件.该计划对应的测试需求. 1)测试目标网站是fnng.cnblogs.co ...