treap 普通平衡树

无旋treap(可持久化,区间操作),解决普通平衡树、文艺平衡树 无旋treap 普通平衡树tyvj1728(treap模板) 如果想看旋转treap怎么写戳这儿 无旋treap代码: #include<bits/stdc++.h> using namespace std; const int N=5e5+5; struct node{ int val,ch[2],size,rd; #define l(x) t[x].ch[0] #define... 阅读详情

     普通treap中最普通的板子(数组版)

      

#include<stdio.h>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cmath>
#define inf 10000000
using namespace std;
struct tree
{
	int l,r,size,tot,h,rd;
} t[100005];
int n,root,fro,bac,hh;
void l_swap(int &root)
{
	int k=t[root].r;
	t[root].r=t[k].l;
	t[k].l=root;
	t[k].size=t[root].size;
	t[root].size=t[t[root].l].size+t[t[root].r].size+t[root].tot;
	root=k;
}
void r_swap(int &root)
{
	int k=t[root].l;
	t[root].l=t[k].r;
	t[k].r=root;
	t[k].size=t[root].size;
	t[root].size=t[t[root].l].size+t[t[root].r].size+t[root].tot;
	root=k;
}
void build(int &root,int k)
{
	if(!root)
	{
		root=++hh;
		t[root].h=k;
		t[root].size=t[root].tot=1;
		t[root].rd=rand();
		return;
	}
	t[root].size++;
	if(t[root].h==k)t[root].tot++;
	else
	{
		if(t[root].h>k)
		{
			build(t[root].l,k);
			if(t[t[root].l].rd<t[root].rd);
			   r_swap(root);
		}
		else
		{
			build(t[root].r,k);
			if(t[t[root].r].rd<t[root].rd)
			    l_swap(root);
		}
	}
}
void del(int &root,int k)
{
	if(!root)return;
	if(t[root].h==k)
	{
		if(t[root].tot>1)
		{
			t[root].tot--;
			t[root].size--;
			return;
		}
		if(t[root].l*t[root].r==0)
		    root=t[root].l+t[root].r;
		else
		{
			if(t[t[root].l].rd<t[t[root].r].rd)
			    r_swap(root);
			else
			    l_swap(root);
			del(root,k);
		}
	}
	else
	{
		 t[root].size--;
		 if(k>t[root].h)del(t[root].r,k);
		 else del(t[root].l,k);
	}
}
void FRO(int &root,int k)
{
	if(!root)return;
	if(t[root].h<k)
	{
		fro=t[root].h;
		FRO(t[root].r,k);
	}
	else FRO(t[root].l,k);
}
void BAC(int &root,int k)
{
	if(!root)return;
	if(t[root].h>k)
	{
		bac=t[root].h;
		BAC(t[root].l,k);
	}
	else BAC(t[root].r,k);
}
int num(int &root,int k)
{
	if(!root)return 0;
	if(t[root].h==k)
	    return t[t[root].l].size+1;
	else
	{
		if(t[root].h>k)return num(t[root].l,k);
		else  return t[t[root].l].size+t[root].tot+num(t[root].r,k);
	}
}
int Q(int &root,int k)
{
	if(!root)return 0;
	if(t[t[root].l].size+1<=k&&t[t[root].l].size+t[root].tot>=k)
	     return t[root].h;
	if(t[t[root].l].size>=k)
	     return Q(t[root].l,k);
	if(t[t[root].l].size<k)
	     return Q(t[root].r,k-t[root].tot-t[t[root].l].size);
}
int yjn()
{
//	 freopen("phs.in","r",stdin);
  //  freopen("phs.out","w",stdout);
	scanf("%d",&n);
	int x,y;
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&x,&y);
		if(x==1)build(root,y);
		if(x==2)del(root,y);
		if(x==3){printf("%d\n",num(root,y));}
		if(x==4){printf("%d\n",Q(root,y));}
		if(x==5){fro=-inf;FRO(root,y);printf("%d\n",fro);}
		if(x==6){bac=-inf;BAC(root,y);printf("%d\n",bac);}
	}
}
int qty=yjn();
int main(){;}

非旋Treap維護普通平衡樹的基本操作 前言 其實我寫過旋轉的Treap,我也寫過可以旋轉不停的Splay 但是我發現Splay克我,所以我學了一下神奇的非旋Treap 效率並不低,效率較低的部分在insert,要調用4次O(log2n)O(log2n)O(log_{2}{n})的函數 其他操作或1次或2次 表現較好在我們學習之前我們可能需要一些關於旋轉Treap的知識 帶旋轉Treap 本文並不是講述帶旋轉Treap的文... 阅读详情

相关推荐

磁悬浮轴承控制策略设计及性能对比

摘要:针对高速磁悬浮转子控制问题,本文提出多方案对比分析。建立含陀螺效应的5自由度动力学模型,分析陀螺耦合、质量不平衡等关键挑战。对比四种控制策略:基础PID解耦、交叉反馈+自适应陷波、H∞鲁棒+前馈补偿、滑模控制+观测器,从实时性、鲁棒性等维度评估优劣。推荐采用交叉反馈+H∞+自适应陷波的混合方案,通过内环电流环与外环位置环协同,实现陀螺效应动态解耦和扰动抑制。实施步骤包括系统辨识、控制器设计、硬件部署等,需配合实验验证与参数整定。该方案综合性能最优,适用于高转速、强扰动场景。

技术工作者 1775

范浩强treap 普通平衡树

增加Split(分裂),Merge(合并)操作,非常好写,时间也不比普通treap慢什么。 1 #include<bits/stdc++.h> 2 using namespace std; 3 struct node 4 { 5 int l,r;int size,rnd,v; 6 }t[500005*50]; 7 int cnt,r...

weixin_30786657的博客 278

InsightFace实战:如何在树莓派上部署轻量级人脸识别系统(附完整代码)

本文详细介绍了如何在树莓派上部署基于InsightFace框架的轻量级人脸识别系统。通过硬件选型、环境配置、模型优化(如MobileFaceNet)及完整代码实战,指导开发者构建本地化、低功耗的智能应用,如智能门铃,并提供了性能调优与系统服务化的进阶技巧。

weixin_29043895的博客 351

【数据结构】范浩强Treap(非旋转平衡树)&可持久化Treap总结

范浩强Treap 这是一种很神奇的数据结构(似乎我每个数据结构都要这么说) 尽管可能是我的模板太丑了,速度实测出来似乎并不比splay快,不过要做到可持久化的话, 这种数据结构就是首选。 另外,这种数据结构相当好写。 简单地说,这种treap基于两种操作: Merge(int x,int y)-&gt;将x的子树和y的子树合并起来,且满足 x的子树的最大值小于等于y子树的...

氧化钠的博客 3765

【高等数值分析】Krylov子空间方法

文章目录1. 预备理论1.1 Krylov 子空间1.2 最佳逼近1.2.1 方法一:最佳平方逼近1.2.2 方法二:假设 AAA 对称正定1.2.3 方法三:残差2范数2. 基底正交化2.1 Arnoldi 过程(CGS)2.2 改进 Arnoldi 过程(MGS)2.3 Lanczos过程3. 方程组求解3.1 全正交方法 (FOM)3.2 D-Lanczos方法3.3 广义极小残量法(GMRES)3.4 MINRES 方法 1. 预备理论 现在需要求解一个大规模稀疏方程组 Ax=bAx=bAx=b,可

Glooow的博客 1万+

统信UOS系统盘空间不足?5分钟搞定扩容的图形化解决方案

本文提供统信UOS系统盘空间不足的图形化扩容解决方案,使用GParted分区编辑器在不丢失数据的情况下快速完成扩容。详细步骤包括准备工作、空间调整和执行验证,适合技术用户快速解决问题。

d6e7f8的博客 958

平衡二叉树-FHQ Treap(无旋平衡树)c/c++代码实现

参考视频:https://www.bilibili.com/video/BV1ft411E7JW?t=1780 代码中有较为详细的注释 #include <bits/stdc++.h> using namespace std; int cnt,root; mt19937 rnd(233); //随机数 struct Node{ int l,r,val,key,size; }fhq[100010]; int newnode(int val){ //开辟新结点 fhq[++cn

xxxxxiao123的博客 631

AEJoy —— 最受欢迎的 5 个 Ae 表达方式

NOTE] 原文作者我意识到表达式可能令人生畏,有些人宁愿复制粘贴有用的代码,而不愿学习这门语言。对此我完全理解。因此,我想与您分享我的。这些是我几乎在每个项目中都会使用的表达式,我认为它们极大地提升了工作流程。

ShaderJoy 的兴趣技术杂货铺 364

Treap【普通平衡树】

Treap是一种结合二叉搜索树(BST)和二叉堆(Binary Heap)特性的数据结构。它通过随机优先级(key)来维持平衡,支持插入、删除、查询排名、查询值、查找前驱和后继等操作。关键操作包括左旋(zag)和右旋(zig),用于在插入和删除时维护堆的性质。Treap的每个节点包含左右子节点指针、值(val)、子树大小(size)、出现次数(tot)和随机优先级(key)。插入时根据值比较决定方向,并通过旋转保持平衡;删除时需处理节点替换和再次平衡。这种结构在保证BST有序性的同时,通过随机优先级实现近似

ywh012805的博客 1275

rk3568 适配以太网(mac 2 mac)

MDIO(Management Data Input/Output)是一种管理数据输入/输出协议,用于在以太网交换机和PHY(物理层收发器)之间进行通信。在Android中,MDIO总线用于控制网络接口的PHY芯片,例如通过MDIO总线访问PHY芯片的寄存器。这些寄存器包含了一些关于网络连接状态、链路速度和其他计算机网络相关信息的数据。MDIO总线通常由网络接口控制器(NIC)使用,以便在OS中管理PHY芯片。在Android设备上,MDIO总线通常由内核驱动程序管理,并且可以通过 /sys/bus/mdi

weixin_35723192的博客 2454

【异常】Claude Code 第三方API 400报错(thinking type should be enabled or disabled)解决方案

摘要: Claude Code接入第三方API端点时出现400参数错误,主要因新版默认启用的Adaptive Thinking功能与旧版接口参数格式不兼容(需thinking: {type: "adaptive"},但第三方仅支持布尔值)。解决方案为修改本地settings.json配置文件,添加"CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING": "1"环境变量并重启客户端,即可恢复思考模式功能。Adaptive Th

奶爸的编程之路,也就一周冷个三天 1万+

洛谷 P3369 【模板】普通平衡树 (Treap)

题目链接:P3369 【模板】普通平衡树 题意 构造一种数据结构满足给出的 6 种操作。 思路 平衡树 平衡树的模板题。 先学习了一下 Treap。 模板来自《算法竞赛进阶指南》。 代码 #include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; const int inf = 0x3f3f...

G19850917的博客 339

AI大模型探索之路-认知篇1-全景透视:揭秘AIGC技术的进化之路

随着人工智能技术的突飞猛进,内容创作方式的发生了革命性的转变;从早期专业人员主导的内容生产,到现如今生成式人工智(AIGC)能创作时代;本篇文章主要讲解AIGC技术的演变历程。

寻道AI,探索AI无限可能! 1650

P3369 【模板】普通平衡树 Treap树堆学习笔记

文章目录Treap = Tree + Heap (树堆 = 树 + 堆)1. 例题1 洛谷P3369 【模板】普通平衡树1. 结构体定义如下2. 向上更新`以u为根的树的节点个数`3. 旋转操作 route4. 插入操作 insert5. 删除操作 del6. 查询排名rand_x7. 查询 K 小值 kth8. 求key的前驱 get_pre9. 求key的后继 get_suf完整代码扩展应用1. 线段树套平衡树,求区间前驱后继排名(就是线段树的每个节点都是一个平衡树)2. 伸展树, 区间反转分割3. 双

马角的逆袭的博客 963

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

普通平衡树(treap)

前言 您需要写一种数据结构,来维护一些数,其中需要提供一下的操作: 1.插入数值x 2.删除数值x(如果有多个,只删除一个) 3.查询数值x的排名(如有多个相同的数,应输出最小的排名) 4.查询排名为x的数值 5. 求数值x的前驱(小于x最大的数) 6.求数值x的后继(大于x最小的数) 首先我们引入一种数据结构叫二叉查找树(BST)。该树满足一下性质: 对于树的任意一个节点 ...

bbbblzy的博客 6211

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

treap——普通平衡树

普通平衡树 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入数值x。 删除数值x(若有多个相同的数,应只删除一个)。 查询数值x的排名(若有多个相同的数,应输出最小的排名)。 查询排名为x的数值。 求数值x的前驱(前驱定义为小于x的最大的数)。 求数值x的后继(后继定义为大于x的最小的数)。 注意: 数据保证查询的结果一定存在。 输入格式 第一行为n,表示操作的个...

行走天涯的豆沙包的博客 196

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

[Treap]普通平衡树

[Treap]普通平衡树题面题目描述输入格式输出格式样例数据输入输出数据范围算法解析概念Treap二叉搜索树/二叉排序树应用操作1操作2操作3、4操作5、6主程序完整代码 题面 题目描述 您需要写一种数据结构,来维护一些数,其中需要提供以下操作: 插入 x\text{x}x数 删除 x\text{x}x数(若有多个相同的数,因只删除一个) 查询 x\text{x}x数的排名(排名定义为比当前数小的数的个数 +1\text{+1}+1 ) 查询排名为 x\text{x}x的数 求 x\text{x}x的前驱

柴春阳的博客 585

Treap 模板基于 Luogu 题目 普通平衡树

Treap = Tree + heap  顾名思义 是 二叉搜索树与堆的结合 我们知道二叉搜索树的性质,比这个节点大的在右子树,小的在左子树。 但是面对具有单调性的插入,就会导致一种灾难性的退化。完全变成一个链子。。 之前总是百思不得其解。。感觉不知道怎么去避免这种退化。。 今天终于懂了,那就是用 随机数 来维护以下堆性质。 我们知道 rand() 函数 是随机生成一个数字,那么我们对...

qq_40924940的博客 249

普通平衡树(Treap)

普通平衡树Treap

~ 575

洛谷 P3369 【模板】普通平衡树(Treap/SBT)

P3369 【模板】普通平衡树(Treap/SBT) 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入x数 删除x数(若有多个相同的数,因只删除一个) 查询x数的排名(排名定义为比当前数小的数的个数+1。若有多个相同的数,因输出最小的排名) 查询排名为x的数 ...

HJ921004的博客 224

【Treap】普通平衡树

平衡树模板Treap

Maple的博客 281

P3369 普通平衡树 (Treap树)

顾名思义,这种数据结构结合了二叉搜索树(BST)和堆(Heap)的特性。它的每个节点含关键字(用于 BST 排序,左子树值小于节点值,右子树值大于节点值)和随机优先级(用于维护堆特性,父节点优先级不小于子节点)。通过左旋、右旋调整节点位置,在维持 BST 特性的同时修复堆特性,避免 BST 退化,保证平均高度为 O (log n)。其插入、删除、查找平均时间复杂度为 O (log n),实现简单,适用于动态维护有序数据场景。

H_Caibird的博客 644

普通平衡树【模板】【treap】

学了一下treap的模板感觉还算容易理解。 其实就是平衡二叉树+堆 每个节点都有一个随机的权值。 根据堆的特性,只有右旋和左旋操作。 个人觉得关键代码就插入和删除部分涉及旋转的维护代码需要理解一下,其他的询问操作都很好写。 #pragma GCC optimize(2) #include <bits/stdc++.h> using namespace std; const int ma...

qq_39921637的博客 308

普通平衡树 treap

平衡树模板题http://codevs.cn/problem/4543/Description写一种数据结构,来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相同的数,因输出最小的排名) 4. 查询排名为x的数 5. 求x的前驱(前驱定义为小于x,且最大的数) 6. 求x的后继(后继定义为大于x,且最小

zeus00的博客 396
上一篇: 无旋Treap
下一篇: 无旋treap 文艺平衡树
QTY_
博客等级 码龄9年 13粉丝 211原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值