#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
const int maxn=500009;
const int oo=2147483647; int T;
int nn=0;
int ch[maxn*50][2]={0},siz[maxn*50]={0},pri[maxn*50]={0},ky[maxn*50]={0};
int root[maxn]={0}; void pushup(int x){
siz[x]=siz[ch[x][0]]+siz[ch[x][1]]+1;
}
int NewNode(int val){
int x=++nn;
ky[x]=val;
siz[x]=1;
pri[x]=rand();
return x;
}
int CopyNode(int y){
int x=++nn;
ch[x][0]=ch[y][0];
ch[x][1]=ch[y][1];
pri[x]=pri[y];
siz[x]=siz[y];
ky[x]=ky[y];
return x;
} int Mer(int x,int y){
if((!x)||(!y))return x+y;
if(pri[x]<pri[y]){
int p=CopyNode(x);
ch[p][1]=Mer(ch[p][1],y);
pushup(p);
return p;
}else{
int p=CopyNode(y);
ch[p][0]=Mer(x,ch[p][0]);
pushup(p);
return p;
}
} void Split(int now,int k,int &x,int &y){
if(!now){
x=y=0;
}else{
if(ky[now]<=k){
x=CopyNode(now);
Split(ch[x][1],k,ch[x][1],y);
pushup(x);
}else{
y=CopyNode(now);
Split(ch[y][0],k,x,ch[y][0]);
pushup(y);
}
}
} void Del(int &rt,int val){
int x,y,z;
Split(rt,val,x,z);
Split(x,val-1,x,y);
y=Mer(ch[y][0],ch[y][1]);
rt=Mer(Mer(x,y),z);
}
void Ins(int &rt,int val){
int x,y,z;
Split(rt,val,x,y);
rt=Mer(Mer(x,NewNode(val)),y);
}
int Kth(int x,int k){
while(x){
int l=ch[x][0];
if(k<=siz[l]){
x=ch[x][0];
}else if(k>siz[l]+1){
k-=(siz[l]+1);
x=ch[x][1];
}else{
return ky[x];
}
}
}
int Rank(int x,int val){
int ret=0;
while(x){
if(ky[x]<val){
ret+=siz[ch[x][0]]+1;
x=ch[x][1];
}else if(ky[x]>val){
x=ch[x][0];
}else{
ret+=siz[ch[x][0]];break;
}
}
return ret+1;
}
int Getpre(int x,int val){
int ret=oo;
while(x){
if(ky[x]<val){
ret=ky[x];
x=ch[x][1];
}else{
x=ch[x][0];
}
}
return ret;
}
int Getsuc(int x,int val){
int ret=-oo;
while(x){
if(ky[x]>val){
ret=ky[x];
x=ch[x][0];
}else{
x=ch[x][1];
}
}
return ret;
} void check(int x){
if(ch[x][0])check(ch[x][0]);
cout<<ky[x]<<' ';
if(ch[x][1])check(ch[x][1]);
} int main(){
scanf("%d",&T);
for(int i=1;i<=T;++i){
int opty,pre,a;
scanf("%d%d%d",&pre,&opty,&a);
root[i]=root[pre];
if(opty==1)Ins(root[i],a);
if(opty==2)Del(root[i],a);
if(opty==3)printf("%d\n",Rank(root[i],a));
if(opty==4)printf("%d\n",Kth(root[i],a));
if(opty==5)printf("%d\n",Getpre(root[i],a));
if(opty==6)printf("%d\n",Getsuc(root[i],a));
// check(root[i]);
// cout<<endl;
}
return 0;
}

  

luogu P3835 【模板】可持久化平衡树的更多相关文章

  1. luogu P3919 [模板]可持久化数组(可持久化线段树/平衡树)(主席树)

    luogu P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目 #include<iostream> #include<cstdlib> #include< ...

  2. luoguP3835 [模板]可持久化平衡树

    https://www.luogu.org/problemnew/show/P3835 因为博主精力和实力有限,学不懂 fhq treap 了,因此只介绍 leafy tree 解法 leafy tr ...

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

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

  4. 2021.07.02 P1383 高级打字机题解(可持久化平衡树)

    2021.07.02 P1383 高级打字机题解(可持久化平衡树) 分析: 从可以不断撤销并且查询不算撤销这一骚操作可以肯定这是要咱建一棵可持久化的树(我也只会建可持久化的树,当然,还有可持久化并查集 ...

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

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

  6. [Luogu 3835]【模板】可持久化平衡树

    Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作(对于各个以往的历史版本): 插入x数 删除x数(若有多个相同的数,因只删除一个,如果没有请忽略该操作 ...

  7. 洛谷P3835 【模板】可持久化平衡树

    题目背景 本题为题目 普通平衡树 的可持久化加强版. 数据已经经过强化 感谢@Kelin 提供的一组hack数据 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作( ...

  8. P3835 【模板】可持久化平衡树

    题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作(对于各个以往的历史版本): 插入x数 删除x数(若有多个相同的数,因只删除一个,如果没有请忽略该操作) 查询x数的 ...

  9. [luogu P3369]【模板】普通平衡树(Treap/SBT)

    [luogu P3369][模板]普通平衡树(Treap/SBT) 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入x数 删除x数(若有多个相同的数,因只删 ...

  10. 数组splay ------ luogu P3369 【模板】普通平衡树(Treap/SBT)

    二次联通门 : luogu P3369 [模板]普通平衡树(Treap/SBT) #include <cstdio> #define Max 100005 #define Inline _ ...

随机推荐

  1. 滑条滚动发请求要用Debounce

    import debounce from 'lodash.debounce'; this.deboucedFunc = debounce(this.viewModel.v_onHomeworkRequ ...

  2. sourceTree 生成公钥和私钥 然后拉项目代码

    第一步 用sourceTree生成公钥pub和私钥文件ppk    打开sourceTree -> 工具 -> 创建或导入ssh密钥 -> 点击generate -> 上面会显 ...

  3. 利用Jenkins实现jdk11+Maven构建springboot项目

    目录 原理图 前期准备 Jdk11安装 Jenkins安装 Maven安装 Jenkins的设置 插件安装 变量配置 搭建项目 1.通用配置 2.源码管理 3.构建触发 4.Maven的构建选项 5. ...

  4. OLAP(On-Line Analytical Processing)

    自20世纪80年代开始,许多企业利用关系型数据库来存储和管理业务数据,并建立相应的应用系统来支持日常的业务运作.这种应用以支持业务处理为主要目的,被称为联机事务处理(On line Transacti ...

  5. GAN评价指标之mode score

    通过 Inception Score 的公式我们知道,它并没有利用到真实数据集的信息,所有的计算都在生成的图片上计算获得.而 Mode Score 基于此做了改进: 也就是说,想要提高 Mode Sc ...

  6. PHP笔记02

    PHP数组 能够在一个变量存储多个值 取值用下标,下标从0开始计算 好处:在处理物品清单等大量相同属性的变量内容时可以集中存取 <?php $arr=array("like" ...

  7. ACM-售货员难题

    题目描述:售货员的难题  某乡有n个村庄(1< n < 20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0 < s < 1000)是已知的,且A村到B村与B村到 ...

  8. MySQL 字符集和校验规则工作流程

    MySQL 字符集和校验规则工作原理 字符编码相关参数 数据流中的转码过程 校验规则 Tips:字符集和校验规则总是相伴的 一 从简单的建库语句开始 CREATE DATABASE [IF NOT E ...

  9. Airflow 使用 Celery 时,如何添加 Celery 配置

    背景 前段时间我选用了 Airflow 对 wms 进行数据归档,在运行一段时间后,经常发现会报以下错误: [-- ::,: WARNING/ForkPoolWorker-] Failed opera ...

  10. 五、CI框架之通过带路径的view视图路径访问

    一.如果需要现在的某个目录的View界面,需要在controller中写入文件路径 二.访问http://127.0.0.1/CodeIgniter-3.1.10/index.php/显示如下: 不忘 ...