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

相关推荐

基于Python爬虫的新闻热点分析与挖掘

本文介绍了基于Python爬虫的新闻热点分析与挖掘方法,主要包括数据收集、预处理、热点分析和可视化四个部分。首先通过爬虫抓取新浪新闻数据,利用文本清洗和存储技术进行数据预处理;接着采用TF-IDF和LDA算法进行关键词提取与主题建模;最后通过词云图和主题分布图实现数据可视化。该方法能有效识别新闻热点,为信息筛选和决策提供支持。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1546

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

OpenCV函数用法之calibrateCamera

参考链接:opencv中标定函数calibrateCamera_ychl87的专栏-优快云博客 世界坐标系的三维点投影到成像坐标系中的二维点的投影公式如下: 其中(X,Y,Z)为世界坐标系中的三维点; (u,v)为成像面坐标系中的二维点; A为相机的内参数矩阵:(cx,cy)为主光轴点,一般为图像的中心;fx和fy为焦距; [R|t]为相机的外参数矩阵:R为旋转矩阵,t为位移矩阵; 上述公式的简单推理过程如下 考虑到镜头畸变 其中,k1,k2,k3,k4,k5和k6为径向畸变,p1和.

tiger&sheep的博客 3万+

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

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

氧化钠的博客 3765

卡尔曼滤波、互补滤波与Tsinghua滤波:平衡车姿态感知的三大算法对比

本文对比了平衡车姿态感知中的卡尔曼滤波、互补滤波与Tsinghua滤波三大核心算法。互补滤波计算简单,适合入门;卡尔曼滤波理论最优但实现复杂;Tsinghua滤波则是一种面向嵌入式优化的轻量级方案,通过动态权重调整和零偏估计,在资源受限的MCU上实现了性能与效率的平衡,是智能车竞赛等场景的实用选择。

weixin_29232121的博客 349

从零开始:用ZEMAX设计双高斯照相物镜的完整流程(附55mm焦距实例)

本文详细介绍了使用ZEMAX设计双高斯照相物镜的完整流程,特别针对55mm焦距实例进行了深入解析。从初始结构选择、参数设置到优化策略和像质分析,逐步指导读者掌握这一经典光学设计方法。通过具体实例展示了如何实现卓越的像差校正,适用于35mm相机标准镜头等应用场景。

onion的博客 708

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

CTP Python API及Demo(利用Swig 封装)Windows版(6.6.1traderapi)

环境:visual studio2015、python3.9、 参考的是景色大神的教程自己制作,因为直接用它编译好的无法使用,遂自己编译。 从CTP官网上下载CTP API点击下载。这里用的版本是v6.6.1_P1_tradeapi,想使用不同的版本下载即可: 安装Swig软件,本文中所用的Swig是swigwin-4.0.2版本,点击下载。下载后解压,将swig路径添加到环境变量中。 安装python,注意要安装64位版本,将环境变量配置好。本文所用的是3.9版本。 通过Swig得到pyth.

ProgramVAE的博客 2543

Treap【普通平衡树】

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

ywh012805的博客 1275

RS485 MODBUS转PROFINET网关案例丨汇川变频器接入到1200 PROFINET

本案例介绍的是用北京小疆智控(北京)技术有限公司生产的GW-PN5003型MODBUS RTU转PROFINET网关将汇川变频器接入西门子PLC1200 PROFINET网络的使用方法。

bjxjzk的博客 1882

QT+QGIS跨平台编译(基于Qt,采用一套代码、一套框架,完成QGIS第三方库、核心库、应用程序的跨平台编译)

QT+QGIS跨平台编译。 基于Qt,采用一套代码、一套框架,完成QGIS第三方库、核心库、应用程序的跨平台编译。

LuckyHanMo的博客 4379

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

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

G19850917的博客 339

AUTOSAR-WdgM篇

Wdg通常有两种:一种是芯片内部自带的片内看门狗,另一种是在芯片外部通过SPI这种接口连接的片外看门狗。MCAL只负责常用的有MCU内部看门狗,片内看门狗的特点是Wdg模块是直接访问相关硬件寄存器。内部看门狗依赖于系统时钟片外看门狗属于设备抽象层负责,通常需要使用MCAL提供的其他模块(比如SPI,DIO,PWM等)来访问/控制外扩看门狗芯片。这种不能直接访问硬件寄存器。Wdg Driver:有三种模式slow mode,fast mode ,off mode。

qq_329563867的博客 5830

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

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

普通平衡树(treap)

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

bbbblzy的博客 6211

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

treap——普通平衡树

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

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

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

余额充值