首页 > 其他分享 >平衡树

平衡树

时间:2024-02-01 10:56:03浏览次数:20  
标签:sz val pbds int rs 平衡 op

能 pbds 写 pbds

无 pbds 写 fhq

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const int N=1e5+3;
int rt,tot,lc[N],rc[N],val[N],rd[N],sz[N];
#define ls lc[p]
#define rs rc[p]
void Up(int p){sz[p]=sz[ls]+sz[rs]+1;}
void Spl(int p,int v,int &x,int &y)
{
	if(!p)return x=0,y=0,void();
	if(val[p]<=v)x=p,Spl(rs,v,rs,y);
	else y=p,Spl(ls,v,x,ls);
	Up(p); 
}
int Mer(int x,int y)
{
	if(!x||!y)return x|y;
	if(rd[x]<rd[y])return lc[y]=Mer(x,lc[y]),Up(y),y;
	return rc[x]=Mer(rc[x],y),Up(x),x;
}
int New(int v)
{
	val[++tot]=v;sz[tot]=1;rd[tot]=rand();
	return tot;
}
void Ins(int v)
{
	int x=0,y=0;
	Spl(rt,v-1,x,y);rt=Mer(Mer(x,New(v)),y);
}
void Del(int v)
{
	int x=0,y=0,z=0;
	Spl(rt,v,x,z);Spl(x,v-1,x,y);
	rt=Mer(Mer(x,Mer(lc[y],rc[y])),z);
}
int Rnk(int v)
{
	int x=0,y=0,s=0;
	Spl(rt,v-1,x,y);s=sz[x]+1;
	return rt=Mer(x,y),s;
}
int Kth(int k)
{
	int p=rt;
	while(1)
	{
		if(k==sz[ls]+1)return val[p];
		k<=sz[ls]?p=ls:(k-=sz[ls]+1,p=rs); 
	}
}
int Pre(int v)
{
	int p=rt,s=0;
	while(1)
	{
		if(!p)return s;
		v<=val[p]?p=ls:(s=val[p],p=rs);
	}
}
int Suf(int v)
{
	int p=rt,s=0;
	while(1)
	{
		if(!p)return s;
		v>=val[p]?p=rs:(s=val[p],p=ls);
	}
}
int main()
{
	int T;cin>>T;
	while(T--)
	{
		int op,x;cin>>op>>x;
		if(op==1)Ins(x);
		if(op==2)Del(x);
		if(op==3)cout<<Rnk(x)<<endl;
		if(op==4)cout<<Kth(x)<<endl;
		if(op==5)cout<<Pre(x)<<endl;
		if(op==6)cout<<Suf(x)<<endl; 
	}
}

标签:sz,val,pbds,int,rs,平衡,op
From: https://www.cnblogs.com/Hanghang007/p/18000738

相关文章

  • 通达信大盘平衡仪优化版指标公式源码
    {指标介绍:红色大盘指数安全,绿色大盘指数调整,红箭头超跌,绿箭头超涨,分析大盘不错的工具。}总家数:=INDEXADV+INDEXDEC;多:=INDEXADV;空:=INDEXDEC;差:=INDEXADV-INDEXDEC;起稳:=Ema(EMA(多,3),5);失衡:=EMA(EMA(EMA(空,4),4),2);生命:=EMA(MA(LLV(起稳,5),3),3);平衡差:=起......
  • 【文化课学习笔记】【物理】平衡力学
    【物理】平衡力学重力大小:\(G=m\mathrm{g}\);方向:竖直向下;\(\mathrm{g}\):不是定值,与高度和纬度有关;高度越高,\(\mathrm{g}\)越小;纬度越高,\(\mathrm{g}\)越大。重心:测量方法:悬挂法。规则图形的重心在几何中心。误区:重心不一定在物体上。注意事项:一个装满水的气球下方开......
  • 32_将有序数组转换为平衡二叉搜索树
    108、将有序数组转换为二叉搜索树给你一个整数数组nums,其中元素已经按升序排列,请你将其转换为一棵高度平衡二叉搜索树。高度平衡二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过1」的二叉树。示例1:输入:nums=[-10,-3,0,5,9]输出:[0,-3,9,-10,nul......
  • P3391 文艺平衡树 题解
    QuestionP3391文艺平衡树写一种数据结构维护有序数列,需要完成以下操作:翻转一个区间,例如原有的序列是\(5,3,3,2,1\),翻转区间是\([2,4]\)的话,结果是\(5,2,3,4,1\)Solution这道题的表达是\(Splay\)但是\(Splay\)的代码实现比较困难,考虑使用FHQTreap。先思考如何将一......
  • Treap(平衡树)
    Treap前置芝士二叉搜索树(BST),见BST。平衡二叉树(AVL)。先来介绍一下平衡二叉树。背景BST出现以后,人们很快发现一个问题,当其维护一个有序序列时,很可能会退化成链。如图:这样的话,原来\(O(\log{n})\)的复杂度就退化为\(O(n)\),这是我们无法接受的,于是平衡二叉树横空出世......
  • 第十二节:红黑树性质、相对平衡的原理、与AVL树的区别
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:原创博客请在转载......
  • 二叉搜索树 & 平衡树学习笔记
    注意,这是一篇学习笔记。二叉搜索树定义空树是二叉搜索树若二叉搜索树的左子树非空,左子树内每个点的权值均小于二叉搜索树根节点的权值若二叉搜索树的右子树非空,右子树内每个点的权值均大于二叉搜索树根节点的权值二叉搜索树的左右子树为二叉搜索树二叉搜索树中每个节......
  • 代码随想录 day17 平衡二叉树 二叉树的所有路径 左叶子之和
    平衡二叉树之前一直写迭代代码没有怎么写递归正好这题不是很好写迭代练习一下递归这题递归逻辑相对简单左右子树高度差判断是不是大于一可以直接返回结果不大于一就高度max(l,r)+1二叉树的所有路径关键要点这题适合先序遍历回溯过程和递归过程是一起写的进来几次......
  • 元学习与人工智能伦理的关系:如何平衡效率与道德
    1.背景介绍元学习(Meta-learning)是一种学习如何学习的学习方法,它旨在帮助机器学习模型在新任务上更快地学习。在过去的几年里,元学习已经取得了显著的进展,并在多个领域得到了广泛应用,如自然语言处理、计算机视觉和推荐系统等。然而,随着元学习在实际应用中的普及,人工智能社区开始关注......
  • 武汉灰京文化:游戏中如何平衡社交心理与娱乐体验
    一款游戏的魅力在于其带给用户的娱乐体验以及带给用户的无限想象空间。然而,作为一个游戏研发者,我们不仅要考虑游戏的体验感、吸引力和创新性,还要考虑玩家在游戏中的心理需求。其中,社交心理占据了重要的位置。玩家们在追求娱乐体验的同时,希望能够从游戏中结交新朋友,收获友情经验,解决......