左偏树学习记录

c++ 左偏树简析 猴王例题讲解 c++左偏树简析 题目:  Monkey King题目描述 很久很久以前,在一个广阔的森林里,住着n只好斗的猴子。起初,它们各干各的,互相之间也不了解。但是这并不能避免猴子们之间的争吵,当然,这只存在于两个陌生猴子之间。当两只猴子争论时,它们都会请自己最强壮的朋友来代表自己进行决斗。显然,决斗之后,这两只猴子以及它们的朋友就互相了解了,这些猴子之间将再也不会发生争论了,即使它们曾经发生过冲突 阅读详情

左偏树学习记录

左偏树有一些和时间复杂度证明有关的性质,但我们只要会用就好了

节点的距离:该节点到离它最近的叶节点的距离

节点的左子节点的距离总是大于右子节点的距离

显然节点的距离等于它右子节点的距离加1

合并(merge)
int merge(int x,int y) { //返回合并后的树的位置
    if(x==0 || y==0) 
        return x+y; //一棵子树为空时
    if(a[x]>a[y]) {
        swap(x,y); //将y插入x
    }
    ch[x][1]=merge(ch[x][1],y); //将y并到x的右子树上
    f[ch[x][1]]=x; //新的树父节点为x
    if(d[ch[x][0]]<d[ch[x][1]]) //如果变为右偏树,则交换两棵子树
        swap(ch[x][0],ch[x][1]);
    d[x]=d[ch[x][1]]+1; //维护该节点的距离
    return x;
}
删除(pop)

将该节点的左右子节点合并

void pop(int x) {
    a[x]=-1;
    f[ch[x][0]]=f[ch[x][1]]=0;
    merge(ch[x][0],ch[x][1]);
}

由左偏树的性质可得,时间复杂度为 log(n) log ⁡ ( n )
我都说了只要会用就好了

例题(luogu P3377 【模板】左偏树(可并堆))

@luogu

直接套模板

#include<cstdio>
#include<cstring>
#include<algorithm>
#define max(x,y) ((x)>(y) ? (x) : (y))
#define min(x,y) ((x)<(y) ? (x) : (y))
#define N 100010
#define ll long long
using namespace std;

inline int getint() {
    char ch;
    int p=0,t;
    for(ch=getchar();ch!='-' && !(ch>='0' && ch<='9');ch=getchar());
    if(ch=='-') t=-1,ch=getchar();
    else t=1;
    for(;ch>='0' && ch<='9';ch=getchar()) {
        p=p*10+ch-48;
    }
    return t*p;
}

int n,m,a[N],f[N],d[N],ch[N][2];

int merge(int x,int y) {
    if(x==0 || y==0) 
        return x+y;
    if(a[x]>a[y] || (a[x]==a[y] && x>y)) {
        swap(x,y);
    }
    ch[x][1]=merge(ch[x][1],y);
    f[ch[x][1]]=x;
    if(d[ch[x][0]]<d[ch[x][1]])
        swap(ch[x][0],ch[x][1]);
    d[x]=d[ch[x][1]]+1;
    return x;
}

int getroot(int x) {
    for(;f[x];x=f[x]);
    return x;
}

void pop(int x) {
    a[x]=-1;
    f[ch[x][0]]=f[ch[x][1]]=0;
    merge(ch[x][0],ch[x][1]);
}

int main()
{
    n=getint();
    m=getint();
    for(int i=1;i<=n;i++) a[i]=getint();
    memset(f,0,sizeof f);
    memset(d,0,sizeof d);
    d[0]=-1;
    memset(ch,0,sizeof ch);
    while(m--) {
        int D=getint();
        if(D==1) {
            int x=getint();
            int y=getint();
            if(a[x]==-1 || a[y]==-1 || x==y) {
                continue;
            }
            merge(getroot(x),getroot(y));
        } else {
            int x=getint();
            if(a[x]==-1) {
                puts("-1");
            } else {
                int y=getroot(x);
                printf("%d\n",a[y]);
                pop(y);
            }
        }
    }
    return 0;
}
从特斯拉到蔚来:拆解主流智能汽车的车联网架构,看它们如何实现‘车、路、云’协同 本文深度解析了特斯拉、蔚来等主流智能汽车的车联网架构,详细拆解了其‘车、路、云’协同的技术实现。从车内网络、车际通信到云端协同,分析了通信技术、系统架构等关键技术选择,揭示了不同厂商如何通过差异化布局构建竞争优势。 阅读详情

相关推荐

从理论到实践:笛卡尔空间阻抗控制的实现挑战与变体解析

本文深入探讨了笛卡尔空间阻抗控制的核心原理、工程实现中的五大挑战及经典变体实战解析。通过详细的数学建模和实际案例分析,揭示了阻抗控制在工业机器人、医疗设备等领域的应用价值,特别是在力感知精度、动力学模型校准和实时计算等方面的关键技术突破。

weixin_30952535的博客 448

一个代码很短的数据结构--左偏树(很有用的)

大家都知道堆能O(log2 n)的解决最大值最小值和它们的插入删除的问题,但是合并就会导致堆不再平衡,如要平衡只能一个一个插入,时间复杂度O(nlogn),那么我们考虑另一个数据结构。堆得堆顶为根节点,删除根为合并跟的左右节点,左偏树在维护最大值是可以单点减,这就是我把fa在merge里更新的原因(虽然也许不用的),这就是左偏树。P4971 断罪者(这题细节很多,但题目没有问题,我放一下代码,记得数组不要开小,我在这里挑了好久)最近在学关于左偏树的知识,今天正好总结一下,也可以当是复习了。

dengjunhaodejia的博客 211

别再只盯着内存溢出了!从Unity崩溃日志中揪出AssetBundle.LoadAsset_Internal的真凶

本文深入解析Unity崩溃日志中AssetBundle.LoadAsset_Internal错误的真实原因,帮助开发者超越内存溢出的表象,识别文件损坏、热更新陷阱等核心问题。通过日志分析技巧、最佳实践和高级调试方法,提供系统化的解决方案,确保Unity资源加载的稳定性。

weixin_42676824的博客 250

【左偏树】例题

例题一: dispatching HYSBZ - 2809 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿。在这个帮派里,有一名忍者被称之为 Master。除了 Master以外,每名忍者都有且仅有一个上级。为保密,同时增强忍者们的领导力,所有与他们工作相关的指令总是由上级发送给他的直接下属,而不允许通过其他的方式发送。现在你要招募一批忍者,并把它们派遣给顾客。你需要为...

Floraqiu的博客 532

Imputation Methods for scRNA Sequencing Data

越来越多的研究者使用单细胞RNA测序(scRNA-seq)技术来表征单细胞水平的转录图谱。他们用它来研究复杂组织的异质性、转录组动力学和未知生物的多样性。然而,在基因表达模式随机性的scRNA-seq数据中普遍存在许多技术和生物学上的噪音。这些数据通常具有高维、稀疏和大量“dropout”值的特点,并且受批处理效应的影响。scRNA-seq数据中大量的“dropout”值严重掩盖了基因之间的重要关系,阻碍了下游分析。因此,scRNA-seq数据dropout值的估算就显得尤为重要。

qq_34179307的博客 540

密码学实战:如何利用生日攻击破解哈希函数

本文深入探讨了生日攻击在密码学中的应用及其对哈希函数的威胁。通过分析生日悖论的数学原理,揭示了哈希函数在实际应用中的脆弱性,并提供了防御策略,如升级哈希算法、正确使用加盐技术等。文章结合实战案例,帮助开发者理解如何有效防范此类攻击,确保系统安全。

weixin_42530732的博客 191

左偏树习题

左偏树习题 1.板题 P3377 https://harris.blog.youkuaiyun.com/article/details/121011654 (参考私密) 2.P2713 板题的双倍经验。 // Problem: P2713 罗马游戏 // Contest: Luogu // URL: https://www.luogu.com.cn/problem/P2713 // Memory Limit: 125 MB // Time Limit: 1000 ms // Date: 2021-10-28 17:40

Harris-H的博客 503

【ANSYS APDL】提取结构刚度矩阵完整过程--附Python代码实现

ANSYS的结构刚度矩阵提取中一些操作技巧

m0_61038364的博客 1万+

BZOJ2809 [APIO2012]dispatching-左偏树-左偏树学习笔记

题目链接:右转进入题目 题目大意:自行参考原题 题解: 算法是不难想到的,主体是dfs一遍,对于第i个点为管理者的情况,先处理出以第i个点为根的子树中所有点为管理者的答案;(假设已经处理好了) 那么要怎么做呢?显然,为了不超过预算,我们要把i这个人和i的子树中的人放到一块去,然后排个序,贪心的选取能力值较小的,能选多少是多少 设选了sz个,那么以第i个人为管理者的答案就是sz*L[i]。

Mys_C_K的博客 631

基于DRU-HVDC的构网型海上风电场环流机理仿真复现

本文介绍了基于DRU-HVDC的构网型海上风电场环流机理仿真模型的构建方法。主要内容包括: 完整的Simulink模型结构,包含主模型文件GFM_DRU_Main.slx和配置脚本GFM_DRU_Setup.m 系统参数设置,包括基础频率(20Hz)、电压基准值(690V)、功率基准值(2MVA)等 四种仿真场景配置:电压不平衡、相位不平衡、阻抗不平衡和频率不平衡 风力发电机(WT)子系统的详细构建步骤,包含电压源、输出阻抗和测量模块 变压器和DRU整流器的参数设置 该模型可用于研究构网型风电场的环流机理。

huanghm88的专栏 262

20、七鳃鳗繁殖与早期生活史:从水质到养殖的全面解析

本文全面解析了七鳃鳗的繁殖与早期生活史,重点探讨了水质对幼体生存的影响、养殖密度与生长关系、变态过程的时间与大小特征,以及人工繁殖在濒危物种恢复和入侵物种控制中的应用。同时,文章分析了大规模养殖面临的挖掘基质需求、空间限制、清洁管理、疾病防控及微生物环境等挑战,并强调实验室养殖对科学研究和种群管理的重要意义。随着技术进步,未来有望扩展更多物种的繁殖研究,揭示七鳃鳗生物学的进化奥秘,实现资源的可持续利用。

l6m7n8的博客 116

左偏树学习笔记

学习材料:https://wenku.baidu.com/view/029c886d1eb91a37f1115ce5.html 例题1:bzoj 2809 [Apio2012]dispatching   题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2809   枚举每个点作为管理者,那么就是子树里选一些 c 最小的,看看最多能选即可...

weixin_30394633的博客 104

恒玄BES调试笔记-BES2500如何打开COMPEXP

打开Compressor and expander会占用资源,这个根据个人项目需求而定吧!打开方法,以及参数修改如下: config\best2300a_ibrt_anc\target.mk SPEECH_RX_COMPEXP ?= 1 apps\audioplayers\bt_sco_chain_cfg_default.c #if defined(SPEECH_RX_COMPEXP) /*****************************************************

leezs的博客 705

GDOI 2023 游记

GDOI 2023 游记 去广州,但是是华南理工旁的酒店,并在广州附中比赛 day -2 没什么,沉浸在一模里 老师 lwj 说能带我们出去、及参观学校,还是抱着期待 day -1 看了若干板子。 晚上听说要和纪中一起在酒店吃饭,有一点失落。 day 0 中午同 gdkoi 一个时间去到了广州,临走前带上了课外文言文。 是 sx 的高级商务电动车,下午三四点到。 天还下着雨。我折腾了能播放劲爆鸡...

KonjakuLAF的博客 690

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

左偏树-总结

【左偏树】左偏树是一种可并堆,也是一种优先队列容器。它除了支持查找最小值、删除最小值、插入值外,还支持优先队列不必需的合并(merge)操作。且左偏树的编程复杂度低,效率较高,适合竞赛中使用。【左偏树的性质】我们一般以存二叉树的方法来描述左偏树:对于每个节点,记录其左右儿子(无儿子的指向空节点0),这个节点的键值,以及节点的距离(距离的定义下面会讲)。struct node{ int l,r

linkfqy 1861

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

嵌入式开发中用Vibe Coding的半年实战:从真香场景到翻车重灾区

AI辅助编程(Vibe Coding)正从Web开发向嵌入式领域渗透,但其在资源受限、时序敏感、硬件耦合度高的MCU开发中并非万能。理解AI生成代码的统计学本质与嵌入式系统确定性要求之间的鸿沟,是高效使用的关键。它能大幅提速上位机工具、通信协议解析、单元测试生成等确定性任务,却容易在HAL层寄存器配置、中断优先级、内存与DMA管理上埋下隐患。通过需求原子化拆分、精准提供芯片与工程上下文、强制人工Diff Review和硬件在环验证,嵌入式工程师可将AI定位为“超级实习生”,把省下的时间聚焦于系统架构、功耗与

weixin_34315485的博客 510

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

左偏树/斜堆——可并堆详解

所谓可并堆,顾名思义,就是可以合并的堆。 最常用的堆应该大家都知道,优先队列二叉堆,是吧 可是如果要求把两个堆合并,要怎么做? 一个个数pop提取出来然后再重新构造一个堆? 显然这种方法太暴力了.. 有了可并堆,这个问题就可以被完美的解决了=V= 可并堆定义: 可并堆(Mergeable Heap)也是一种抽象数据类型,它除了支持优先队列的三个基本操作(Insert, Minimum

来自Fop_zz的辣鸡题解或教程 1951

可合并堆之左偏树的简介与应用

前言 在之前的这篇文章里,笔者详细讲解了二叉堆这种简单有效的数据结构,并且讨论了优先队列的实现方式。现在有个新的问题: 给定两个优先队列,请尽量高效地将它们合并成一个优先队列。 很显然,如果我们使用二叉堆实现,只能先出队再入队,而线性复杂度显然不能令人满意。所以我们需要考虑可合并堆(mergeable heap),常见的可合并堆有如下四种: 左偏树(leftist tree)...

LittleMagic's Blog 918

可并堆——左偏树

定义 左偏树(Leftist Tree)是一种可并堆的实现。左偏树是一棵二叉树,它的节点除了和二叉树的节点一样具有左右子树指针( left, right)外,还有两个属性,键值和距离(dist)。 先引入一个概念 外节点:一个左子树为空或者右子树为空即可在其子树并入新元素的节点 距离:父节点到外节点最少的经历的边数 所以对于外节点,dist(i)=0; 性质 左偏树的本质是一颗有序的二叉...

David1950的博客 316

知识点 - 左偏树

知识点 - 左偏树 解决问题类型: 左偏树,一种可以合并的堆状结构,支持insert/remove/mergeinsert/remove/mergeinsert/remove/merge等操作。稳定的时间复杂度在Θ(logn)Θ(logn)Θ(logn)的级别。对于一个左偏树中的节点,需要维护的值有distdistdist 和 valuevaluevalue。其中value不必多说,distdis...

qq_41848675的博客 213

左偏树原理记录

这玩意老是忘,还是记录一下吧( 考虑一般的合并两棵以 x,yx,yx,y 为根的堆的过程: 若 x,yx,yx,y 中有一者是 000,返回另一者。 否则不妨设 vx≤vyv_x\leq v_yvx​≤vy​,那么我们就是把 xxx 设为新的堆的根,然后选 xxx 的某一个儿子和 yyy 合并。 左偏树就是利用了第一条性质。我们设 “外节点” 表示只有至多一个儿子的节点,设一个点的 “距离” 表示这个点到其子树内最近的外节点的距离。 设节点 xxx 的距离为 ddd,那么其子树内至少有 O(2d)O(2

ez_lcw的博客 514

左偏树初步学习 && 洛谷P3377

玩的有点多。。。。。。睡的有点少。。。 左偏树是一种支持O(logn)的时间复杂度内进行合并的堆式数据结构。 定义: 外结点:左儿子或者右儿子是空结点的结点 距离:一个结点x的距离disx定义为其子树中与结点x最近的外结点到x的距离,特别的,定义空结点的距离为-1. 图中: 结点中写的数字为结点的键值,结点外的蓝色数字叫做该结点的距离 左偏树依旧满足堆的性质(小根堆) 左偏树保证结点的左子结点的距离不小于右子结点的距离,所以可以推出一个结点的距离等于右子结点的距离+1 合.

自闭啦~~ 1271

「学习笔记」左偏树

左偏树是一种可以合并的“堆”。这里打了引号,是因为左偏树并不是堆,但是能完成与堆类似的功能。而且还能支持可持久化。 在可合并对中,左偏树是最常用的。虽然它的效率不及斐波那契堆与配对堆,但是复杂度是同一个级别,单次操作最坏情况下都是\(O(log_2n)\)的。而且不像斐波那契堆,码量大,难理解,在竞赛中用太不合算了,配对堆不资瓷可持久化。。。。。 放张表格,看看你打算学哪种?这里(目前)只教左偏树...

weixin_33755847的博客 87
上一篇: B 酱的无向图 题解
下一篇: 题解 luogu P2484 【[SDOI2011]打地鼠】BZOJ2241 O(N^2.5)
Ansicht
博客等级 码龄9年 6粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值