无旋Treap

【学习笔记】数据结构:无旋Treap 最近学习了一下无旋Treap,发现无旋Treap真的太好打了,而且也很好理解,很好用。 Treap? 什么是Treap? 顾名思义:Treap=Tree+heap,即“树堆”,“树”指的是二叉查找树,“堆”就是堆。 那二叉查找树跟堆有什么关系呢? 当输入的数据十分恶心的时候,普通的二叉查找树的时间复杂度就会由 nlog2nnlog_2nnlog2​n 退化到 n2n^2n2 级别,时间复杂度难以让人接受。 而我们现在考虑优化,我们可以在每一个节点上多放一个数,然后使得这棵树既满足二叉排序树的性质也满足堆的性 阅读详情

    想要搞带区间的平衡树,要么用splay,要么用无旋treap。(现在只会后面的)

    先%一下大佬LadyLex

    无旋treap简言之不再有左旋和右旋,而多了拆分子树和合并子树的过程。

    slipt为拆树。D 为定义的pair,first是拆下来的树,second是拆下来后剩下的原树。

    如果要拆下来的树的大小比左子树小,就拆左子树,并把拆完的树接回来。

    如果左子树不够大,就要连上根和右子树,把拆下来的树接在原树上->要拆的树,剩下的树就是“拆剩下的原树”

D split(treap *f,int k)
{
	if(f==null)return  D(null,null);
	push(f);D y;
	if(f->ch[0]->size>=k)
	    {y=split(f->ch[0],k);f->ch[0]=y.second;f->update();y.second=f;}
	else
	    {y=split(f->ch[1],k-f->ch[0]->size-1);f->ch[1]=y.first;f->update();y.first=f;}    
	return y;
}
      merge为合并树。因为维护的树根节点的id值最小(我这么维护的)a树的值要比b树的小。

     如果a的id小,把b接为a的右子树,反之,把a接为b的左子树。

treap* merge(treap *a,treap *b)
{
	if(a==null)return b;
	if(b==null)return a;
	push(a);push(b);
	if(a->id<b->id)
	     {a->ch[1]=merge(a->ch[1],b);a->update();return a;}
	else
	     {b->ch[0]=merge(a,b->ch[0]);b->update();return b;}
}

     这个只是点的修改,如果为区间,加一个类似线段树的延迟标记,记录当前节点是否更改。

     插入值

inline void Insert(int v)
 {
     int k=Getkth(root,v);
     D x=Split(root,k);
     Treap *o=new Treap(v);
     root=Merge(Merge(x.first,o),x.second);
 }
      删除值

void Delete(int v)
 {
     int k=Getkth(root,v);
     D x=Split(root,k);
     D y=Split(x.second,1);
     root=Merge(x.first,y.second);
 }
    获得此点的排名

int Getkth(Treap *o,int v)
 {
     if(o==NULL)return 0;
     return(o->val>=v)?Getkth(o->ch[0],v):Getkth(o->ch[1],v)+size(o->ch[0])+1;
 }

       求某点的权值

inline int get_val(int rank)
{
	D x=split(root,rank-1);
	D y=split(x.second,1);
	int ans=y.first->h;
	root=merge(merge(x.first,y.first),y.second);
	return ans;
}

    我说的并不是太明白,链接一下LadyLex的完美讲解

3D 结构光相机工作原理全解 | 从编码投射到三维重建,原理 + 代码 + 工业实战一站式掌握 本文从3D结构光相机的整体架构出发,层层拆解了编码投射、相位计算、相位解包裹、三维重建的核心原理,补充了工业实战所需的公式推导、代码实现、参数调优、设备选型和案例落地,核心总结如下:相位是3D结构光成像的“灵魂”,其精度、稳定性直接决定3D重建的效果,包裹相位与绝对相位的区分的是工业实战的基础;编码投射的核心是“正弦条纹+格雷码条纹”组合,正弦条纹负责高精度相位提取,格雷码条纹辅助解包裹,适配工业场景的精度与稳定性需求; 阅读详情

相关推荐

MTK Linux DRM分析(十一)- MTK KMS Panel显示屏驱动

面板扩展(Panel Extension)是指 MediaTek 在标准 DRM 面板驱动框架之上添加的定制化功能模块。

iTom1900 1687

浅谈无旋treap(fhq_treap)

一、简介 无旋Treap(fhq_treap),是一种不用旋转的treap,其代码复杂度不高,应用范围广(能代替普通treap和splay的所有功能),是一种极其强大的平衡树。 无旋Treap是一个叫做范浩强的大佬发明的(快%啊!) 在我们一起学习无旋Treap之前,本蒟蒻有几句活想说: 1.无旋Treap我个人认为是最容易理解的一种平衡树,而且编程复杂度不高,功能还那么强大。 ...

aaa3201的博客 1646

基于人脸识别的课堂考勤系统 tkinter+openpyxl+face_recognition

基于face_recognition库实现人脸考勤系统功能。利用Python的tkinter模块来设计考勤系统的图形化界面,此外结合openpyxl模块,实现将学生的信息和考勤打卡数据保存到表格中,方便查看和调用。该系统具备“刷脸打卡”、“新学生注册”等功能。............

lyx4949的博客 6965

【数据结构】FHQ Treap详解

FHQ Treap是什么? FHQ Treap,又名无旋Treap,是一种不需要旋转的平衡树,是范浩强基于Treap发明的。FHQ Treap具有代码短,易理解,速度快的优点。(当然跟红黑树比一下就是……)至少它在OI中算是很优秀的数据结构了。 前置知识: C++ 二叉搜索树的基本性质,下面会讲 二叉堆 二叉搜索树的基本性质 很简单,就这几个。 在二叉搜索树中,每个结点都满足左...

聚娃科技开发者博客 1497

23. STM32F103C8T6 ADC采集光敏电阻传感器模块光照强度实战

本文详细介绍了如何使用STM32F103C8T6的ADC模块采集光敏电阻传感器的光照强度。通过硬件接线、核心原理讲解、四步代码配置(GPIO、ADC模式、使能校准、数据滤波)以及串口验证,手把手指导完成从模拟信号到数字值的完整实战流程,并重点提示了ADC时钟分频等关键配置要点。

weixin_42300144的博客 221

一文读懂 MAVLink、PPM、SBUS:无人机通信协议的工作原理与适用场景

本文系统对比无人机领域三大核心通信协议:MAVLink作为全链路数据协议,支持飞控与地面站的双向通信,适合航拍测绘等专业场景;SBUS是数字化的高效控制协议,具备16通道、抗干扰特性,成为中高端设备标配;PPM作为传统模拟协议,成本低廉但性能有限,适合入门级应用。文章深入解析各协议的工作原理、帧结构、适用场景及调试技巧,指出MAVLink侧重状态监控、SBUS/PPM专注控制指令的互补关系,并给出新手选型建议:入门选PPM,进阶用SBUS,开发必备M

bother3000的博客 7126

无旋转Treap简介

  无旋转Treap是一个神奇的数据结构,能够支持插入,删除,查询k大,查询某个数的排名,查询前驱后继,支持各种区间操作和持久化。基于旋转的Treap无法实现区间反转等操作,但是无旋Treap可以轻易地支持区间操作。那为什么区间操作不用Splay而要去学无旋转Treap?原因很简单,Splay的时间复杂度是均摊的不能可持久化,而且无旋转Treap的代码量少得起飞(明明是yyf的Spl...

adx33526的博客 370

用C++手把手教你连接SimNow期货模拟盘:从CTP API封装到第一个订单(附完整代码)

本文详细介绍了如何使用C++连接SimNow期货模拟盘,从CTP API的基础架构解析到实现第一个订单的完整流程。内容涵盖CTP API的封装、SimNow环境配置、交易通道实现、行情接收与处理等核心环节,并提供完整代码示例,帮助开发者快速掌握量化交易中的期货模拟盘连接技术。

weixin_27215337的博客 330

[C++ 学习笔记] FHQ-Treap (无旋 Treap)

C++ FHQ-Treap - 无旋 Treap - 树堆 学习笔记

lzl20220405的博客 3173

以太网详解(一)-MAC/PHY/MII/RMII/GMII/RGMII基本介绍

网络设备中肯定离开不MAC和PHY,本篇文章将详细介绍下以太网中一些常见术语与接口。 MAC和PHY结构 从硬件角度来看以太网是由CPU,MAC,PHY三部分组成的,如下图示意: 上图中DMA集成在CPU,CPU,MAC,PHY并不是集成在同一个芯片内,由于PHY包含大量模拟器件,而MAC是典型的数字电路,考虑到芯片面积及模拟/数字混合架构的原因,**将MAC集成进CPU而将PHY留在片外,这种...

sternlycore的博客 13万+

Tesseract in Java - Intellij IDEA对Tess4J的配置和使用

最近要弄OCR,搜到这个,官网全英文,很烦,看看有没有中文的博客介绍,擦,一个比一个奇葩,还是自己按照官方的来吧,外网慢的很,传到csdn给大家下载。中文训练库下载地址: http://download.youkuaiyun.com/detail/d_dmelon/9916532Tess4J3.4下载地址: http://download.youkuaiyun.com/detail/d_dmelon/9916519安装

Lewis的博客 1万+

无旋Treap——从入门到放弃

前言已经是从入门到放弃的第四篇了。 但是本文并不打算给大家讲无旋Treap复杂度证明一类的。 很显然每次操作都是期望Olog(n)的{\bf O}\log(n)的什么是Treap?Treap=Tree+heap 其核心思想在于在权值上维护一棵二叉查找树,在优先级上维护一个堆 有旋treap利用旋转操作来维护堆的性质, 而无旋treap利用有序构树维护堆的性质。无旋Treap的两大构树顺序:

Friedrich_Taylor的博客 5479

麒麟系统无法进入单用户模式该怎么办?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 备注:部分问题/疑难杂症搜集于互联网。

**My Coding Family** 1820

无旋Treap——FHQ Treap

FHQ Treap

Lucas_FC_的博客 948

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jre9下载 jdk9

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

无旋treap学习笔记

无旋treap ,又称为 非旋treap , fhq_treap ,是一个非常实用的数据结构,用来优化一般的 二叉搜索树 所解决不了的问题,大大提高了时间的效率,在解决平衡树问题的应用较广。

White_gugu的博客 691

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

无旋Treap学习

无旋Treap学习 核心操作 split: void split(int rt, int & a, int & b, int sz) //按size分 { if (rt == 0) { a = b = 0; return; } flip(rt); if (tree[tree[rt].lc].sz <= sz-1) { a = rt; split(tree[rt].rc, tre

Flyzz的博客 218

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

无旋Treap--FHQ Treap

无旋Treap 解析 FHQTreapFHQ TreapFHQTreap和普通的TreapTreapTreap都是一个二叉搜索堆,其同时满足二叉树的性质(左子树的权值小于等于当前节点权值,右子树权值大于当前节点权值)和堆的性质(对于小根堆,当前节点的优先级是堆中最小的)。 优点: 1,代码实现简单 2,可以实现可持久化 核心操作(以下均为小根堆) 初始化 我常用数组写法 int val[M],po...

Daniel__d的博客 226

【无旋Treap】数据结构课程项目报告

数据结构课程项目报告 (建议使用Typora打开此报告) 此博客仅供学习交流,请勿抄袭 设计一个合理的数据结构,使用尽量少的时间复杂度和空间复杂度,支持一些常见操作。此外,尽可能多的支持扩展操作。 一.基本思路 1.结构选择 ​ 在本项目中,我将实现一个名为LinearTable的数据结构,来支持一些常见操作。对于最基本的操作,可以使用deque的实现思路解决,但当需要做到任意中间位置插入元素的时候,大部分线性连接结构的性能将会大幅下降至O(n)O(n)O(n)。因此,本项目会采用更为灵活的

George_Plover的博客 628

可持久化无旋Treap学习

可持久化无旋Treap 今天又学习了可持久化非旋Treap,其实很简单,将普通的非旋Treap持久化一遍就行了。具体来说,就是将每次操作后得到的树记录下来,每次需要改变一个点的信息时,将原有的点的信息记录下来,建一个新点去更改它的信息。 其实持久化的过程与线段树的持久化相似。 其实打出来跟普通的非旋Treap差不多,加几个改点的步骤即可。 非旋Treap学习见此处:非旋Treap学习 模...

StaroForgin的博客 255

无旋treap树

约定: int ch[maxd][3];//0左儿子,1右儿子 int val[maxd];//权值 int rnd[maxd];//随机权值 int sze[maxd];//以每个点为根树的大小 int T,rt,x,y,z; 分裂: inline void update(int x) { sze[x]=1+sze[ch[x][0]]+sze[ch[x][1]]; } //x为...

Black__wing的博客 379

无旋Treap学习笔记

Splay学的头痛,还不知道要怎么用 还是学一学无旋Treap养老比较好,splay能写的也能写,但是常数比较大 依赖随机化大法,复杂度还是比较优秀 主要依靠split分裂操作和merge合并操作来实现各种操作 推荐视频:https://www.bilibili.com/video/av60140850?from=search&seid=2025355617102903408 #inc...

weixin_40588429的博客 175

【学习笔记】Treap和无旋Treap

如题。

七代目鸽影 414

普通平衡树(Splay,无旋Treap)

#include <bits/stdc++.h> #define maxn 500005 using namespace std; int n,sz,root,fa[maxn],val[maxn],ch[maxn][2],siz[maxn],cnt[maxn]; inline bool isc(int x){return ch[fa[x]][1]==x;} inline void up...

Master.Yi的博客 511
上一篇: 莫队
下一篇: treap 普通平衡树
QTY_
博客等级 码龄9年 13粉丝 211原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值