左偏树学习记录

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;
}
Widar3.0复现日志(DFSExtractionCode) 需要使用的matlab基本功能 阅读详情

相关推荐

反激电源占空比为何必须小于0.5?次谐波振荡与斜坡补偿详解

在开关电源设计中,峰值电流模式控制因其优异的动态响应和逐周期限流保护而被广泛应用。其工作原理是通过采样电感电流的峰值,与误差电压比较来控制开关管的导通与关断。然而,这种控制方式在反激等隔离拓扑中,当占空比超过50%时,会面临一个固有的稳定性挑战——次谐波振荡。这是由于电流扰动会在相邻开关周期内被放大而非衰减,导致系统在开关频率一半处发生振荡,严重影响输出纹波和可靠性。为解决这一问题,工程上引入了斜坡补偿技术,通过向控制信号叠加一个固定斜率的斜坡,改变环路增益条件,从而在宽输入电压或高占空比需求下维持系统稳定

weixin_29631169的博客 624

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

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

dengjunhaodejia的博客 211

Android 13 录音APK在后台无数据的处理

未获取到录音数据

chenchen4310的博客 1182

【左偏树】例题

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

Floraqiu的博客 532

基于STM32设计的智能水产养殖系统(华为云IOT)(152)

当前设计的智能水产养殖系统主控芯片采用STM32F103RCT6,可以实现对水位、水温、水混浊度和PH值等参数的监测和控制,并且支持定时投喂功能。通过连接华为云物联网平台,将传感器数据上传到服务器,并通过Qt设计的Android手机APP来获取设备上传的数据,从而实现对养殖环境的远程监测和控制。

8828

【PCL 特征】积分图法线估计

本文介绍了基于积分图的有序点云法线估计方法。通过利用点云数据的行列式结构特性,该方法避免了传统KD树搜索,采用积分图将邻域统计运算复杂度从O(k²)降至O(1)。详细阐述了四种法线估计算法:协方差矩阵法(精度最高)、平均3D梯度法(实时性好)、平均深度变化法(适合SLAM)和简单3D梯度法(速度最快)。重点分析了积分图构建、动态窗口平滑处理、法线方向调整等关键技术,并提供了PCL实现代码示例。实验表明,不同方法在精度和速度上存在显著差异,可根据具体应用场景选择合适算法。

yijiujiusan的博客 275

左偏树习题

左偏树习题 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

EPLAN 电气制图(六):结构盒与设备管理器核心概念(基础知识选看)

结构盒是 EPLAN 中用于标识元件安装位置的逻辑容器,非实际设备或黑盒,仅用于原理图中划分功能区域或物理位置(如 “柜内”“柜外”)。标识符设置:在 “显示设备标识符” 中输入位置代号(如 “+ 柜外”),完整格式为 “= 高层代号 + 位置代号”;筛选与定位:通过 “筛选器” 按类别(如电机、接触器)快速查找设备,右键 “转到(图形)” 可高亮定位图纸中的元件;设备保护:重要设备可启用保护(【项目数据】→【设备】→【启用设备保护】),防止误删除(显示橙色圆圈标记)。

电工 1057

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

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

Mys_C_K的博客 631

万字数据仓库面试题及参考答案

星型模型由一个中心的事实表和多个外围的维度表组成,事实表存储度量值和事实,维度表存储描述性属性和维度。星型模型和雪花模型的区别在于雪花模型将维度表进一步细化,形成多层次的结构,而星型模型由一个中心事实表和多个维度表组成,适用于查询较为简单的情况。维度建模通常采用星型模型或雪花模型,将数据分为事实表和维度表,其中事实表存储度量值和事实,维度表存储描述事实的属性。三者之间的关系可以这样理解:数据仓库主要关注历史数据的存储和分析,数据中台则关注数据的服务化和资产化,而数据湖则关注原始数据的存储和多样性。

大模型大数据攻城狮的专栏 558

SAP-ABAP:SAP数据库视图的创建图文详解

在“短文本”字段中输入视图的描述。在“表/视图”字段中输入要基于的表名。如果视图基于多个表,可以在这里输入主表。点击“表/视图字段”按钮,选择要包含在视图中的字段。如果视图基于多个表,点击“关系”按钮来定义表之间的连接条件。在弹出的窗口中,选择要连接的表,并定义连接条件(例如。

baidu_35680696的博客 973

左偏树学习笔记

学习材料: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

用 SAP-ABAP-1 把 ABAP 代码理解这件事交给 AI:从遗留代码到 ABAP Cloud 的开发加速器

SAP-ABAP-1是SAP推出的首个专用ABAP基础模型,专注于理解和解释ABAP代码,帮助开发者更快迁移和维护遗留系统。它强调ABAP Cloud合规编码实践,通过SAP AI Foundation提供访问,主要能力包括代码解释、业务语义理解和框架约束分析。相比通用模型,它能更好处理ABAP特有的版本差异、权限控制和扩展边界等问题。该模型可集成到多种开发环境中,支持文件化开发体验,并能与SAP Joule等工具协同工作,为ABAP团队提供智能辅助。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3823

GDOI 2023 游记

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

KonjakuLAF的博客 690

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

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...

左偏树-总结

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

linkfqy 1861

Camera2Demo

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

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

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

weixin_34315485的博客 510

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

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

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

所谓可并堆,顾名思义,就是可以合并的堆。 最常用的堆应该大家都知道,优先队列二叉堆,是吧 可是如果要求把两个堆合并,要怎么做? 一个个数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、付费专栏及课程。

余额充值