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的文... 阅读详情

相关推荐

群晖Video Station海报墙插件更新了!手把手教你用c5h12o5插件搞定豆瓣/TMDB搜刮

本文详细介绍了如何使用c5h12o5插件为群晖Video Station配置高效的海报墙系统。该插件支持豆瓣、TMDB等多数据源并行搜刮,智能优先级设置和本地化优化,解决TMDB API失效问题,提升影视库管理体验。包含安装教程、配置策略和高级使用技巧,适合影视爱好者优化NAS媒体库。

weixin_29250403的博客 265

范浩强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

NXP S32K3 Safety软件生态全解析:RTD、SPD、SAF、SCST到底怎么选?

本文深入解析NXP S32K3系列MCU的安全软件生态,详细对比RTD、SPD、SAF和SCST四大组件的功能定位与选型策略。针对不同ASIL等级需求,提供从架构设计到工程实践的完整解决方案,帮助开发者高效实现功能安全认证,优化汽车电子系统的安全性与可靠性。

weixin_42524226的博客 324

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

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

氧化钠的博客 3765

软件项目管理期末复习(看这一篇就够了)

软件项目管理考试复习 🔶🔶🔶🔶🔶加了🔶的是考点 第一章软件项目管理概述 1.1.1项目及其特征 项目定义:🔶 项目就是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力; 是以一套独特而互相联系的任务为前提,有效地利用资源,在一段时间内满足一系列特定目标的多项相关工作的总称。 日常运作和项目的区别: 项目是一次性的,而日常运作是重复进行的。 项目是以目标为导向的,日常运作是通过效率和有效性体现的。 项目是通过项目经理及其团队工作完成的,日常运作是职能式的线性管理。 项目存在大量的变更管理,

qq_50886857的博客 3万+

vLLM专题(七)-支持的模型列表

vLLM支持跨多种任务的生成式和池化模型。如果一个模型支持多个任务,您可以通过–task参数来设置任务。对于每个任务,我们列出了已在vLLM中实现的模型架构。每个架构旁边,我们列出了一些使用该架构的流行模型。

1260

平衡二叉树-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

【立创EDA-PCB设计基础】4.模块化布局

本文对本专栏绘制的原理图进行模块化布局,首先进行预布局(将每个模块放一起),然后进行精细化布局(按照原理图来精细化布局)。

嵌入式阿齐Archie 3万+

Treap【普通平衡树】

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

ywh012805的博客 1275

2025年CSP-J复赛真题及题解:T4 多边形(polygon)

2025年CSP-J复赛真题及题解:T4 多边形(polygon)

王老师青少年编程 1718

【WRF-Chem 工具】CAMStoWRF详解:CAMS数据下载及处理

【WRF-Chem 工具】CAMStoWRF详解:CAMS数据下载及处理

WW、forever的博客 195

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

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

G19850917的博客 339

【Bug已解决】Codex App returns 401 Missing bearer/basic authentication after login on multiple Windows la

原始报错:Codex App returns 401 Missing bearer/basic authentication after login on multiple Windows laptops场景:用户在 Windows 笔记本上登录应用成功了,但随后每个业务请求都返回 401,提示"Missing bearer/basic authentication"。登录态像是"假的"——明明登了,请求却没带任何认证信息。多台 Windows 设备都能复现。

一键难忘的博客 596

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

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

普通平衡树(treap)

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

bbbblzy的博客 6211

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

treap——普通平衡树

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

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

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

[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、付费专栏及课程。

余额充值