Cartesian树的建立算法

笛卡尔树(Cartesian Tree) 笛卡尔树是一棵二叉树,树的每个节点有两个值,一个为index,一个为value。光看index的话,笛卡尔树是一棵二叉搜索树,每个节点的左子树的index都比它小,右子树都比它大;光看value的话,笛卡尔树有点类似堆,根节点的value是最小(或者最大)的,每个节点的value都比它的子树要小(或者大)。   它可以处理范围最值查询、范围top k查询(range top k queries)等 阅读详情

Cartesian树(笛卡儿树)是一种特殊的堆,它根据一个长度为n的数组A建立。它的根是A的最小元素位置,而左子树和右子树分别为A[1...i-1]和A[i+1...n]的笛卡儿树。

例如:数组A为 5 4 6 2 7 9 8 1 3 10

则这棵Cartesian树为


此主题相关图片如下:
按此在新窗口浏览图片

由上图可以看出,A[1]...A[n]为这棵树的中序遍历。

那么,如何建立Cartesian树呢?

根据他的定义,按照顺序来找最小值,但是这种算法的最坏情况下的复杂度是O(n^2)的。

现在来介绍一种复杂度为O(n)的算法。

Cartesian树的建立算法:

首先,先从A[1]开始建立,以后每次加一个数,就修改Cartesian数,不难发现,这个数一 定在这棵树的最右边的路径上。而且一定没有右孩子(应为数组为树的中序遍历),所以,只沿着最右路径自底向上把各个节点p和A[i]做比较,如果 p<A[i],那么A[i]就为p的右孩子,如果p>A[i],那么比较p的父亲与A[i],如果A[i]>p的父亲,那么A[i]为 p的父亲的右孩子,而p则改为A[i]的左孩子。因为每个节点最多进入和退出最右路径各一次,所以,均摊时间复杂度为O(0)。


使用 PLS 回归进行近红外光谱的异常值检测 在光谱数据中,并非每个数据点都是有效的,因此,在构建模型时找到与大部分数据不符合的数据点是一种必要的操作。这些数据我们称之为。在这篇文章中,我们将使用PLS回归进行红外光谱数据的异常值检测。 阅读详情

相关推荐

SAP VF01开票报错:出口贸易数据不完整

找了半天资料,最后发现是没有维护凭证抬头的数据;由于我不是SD模块顾问,整体流程使用的是原本环境里面的数据,用新建工厂引用,所以也不知道为啥会出发这个贸易业务。正常传到FICO模块,生成会计凭证、获利分析、利润中心及CO凭证。需要维护这三个字段后才能正常转到FI生成会计凭证。VF01开票报错:出口贸易数据不完整。

MaiKouBei的博客 1540

C++的数据结构(九): 笛卡尔树

C++的数据结构(九): 笛卡尔树

全栈工程师Linda的博客 1394

避开模板匹配的坑:OpenCVSharp中边缘梯度算法的优化实践

本文深入探讨了OpenCVSharp中边缘梯度算法在模板匹配中的优化实践,解决了传统方法在尺度变化、角度旋转和光照差异下的局限性。通过Sobel算子提取边缘梯度特征,结合轮廓检测和多尺度匹配策略,显著提升了匹配的鲁棒性和准确性。文章还分享了并行计算、内存访问优化等实战技巧,适用于工业检测和自动化识别场景。

http9protocoller的博客 198

震惊,全中国有十亿人都不知道它————笛卡尔树(Cartesian_tree)

笛卡尔树 学习笛卡尔树的完整步骤: 1.打开音乐播放器,播放《你是人间四月天》 2.看完这篇博客 笛卡尔树:笛卡尔树是带有一些特殊性质的树形结构,好像说了和没有说一样。 性质:笛卡尔树中有这样的二元组(key,value)。 其中key满足二叉搜索树的性质(即父节点的key值大于左儿子,父节点的key值小于右儿子 )。 value满足堆的性质(即父节点的value值小于子节点的...

qq_43141496的博客 1383

ISO26262功能安全--产品开发过程

目录 1.总体理解 2.概念阶段——吹牛,我们是打草稿的 2.1 相关项定义 2.2 HARA分析 2.3 功能安全目标 2.4 安全需求与安全概念 3. 系统阶段——闭门造神车,我们开始修炼 3.1 技术安全需求(TSC) 3.2 系统架构设计 3.3 安全分析与独立性分析 3.4 软硬件接口(HSI) 4. 硬件阶段——苦其心志,苦练经骨 4.1 硬件架构...

AgingMoon的博客 1万+

西门子与汇川伺服脉冲连接(速度模式)

如何使用西门子PLC与汇川伺服进行脉冲连接

2301_77347966的博客 1万+

POJ 2201 Cartesian Tree 笛卡尔树

题目: 笛卡尔树:笛卡尔树中的每个节点有两个数据域k,a,对于数据域k,满足二叉搜索树性质,对于数据域a,满足最小堆性质。 给出N个节点,1 解题思路: 首先,根据N个节点,肯定可以构造出一颗笛卡尔树。 方法1:  递归法  (经过验证,该方法会超时) (见代码1.) a) 对节点数组,选出a值最小的节点,该节点为根节点 b) 以根节点的k值为枢纽对数组进行划分,小于k的节点位于根

路漫漫其修远兮,吾将上下而求索 2740

高通平台开发系列讲解(系统篇)系统关机流程

📢本篇章主要图解高通平台系统关机流程。

内核笔记 3212

笛卡尔树(Cartesian Tree)

笛卡尔树性质建树Code 性质 有两个关键字(x,y)(x,y)(x,y)组成 如果只看第一个关键字x的时候它满足二叉搜索树(二叉查找树的性质)即:中序遍历为原来的序列,并且idls<idx<idrsid_{ls}<id_x<id_{rs}idls​<idx​<idrs​ 如果看第二个关键字的话它满足小根堆的性质。即:节点的权值valvalval,大于两个儿子的 任意两个点的LCA的权值就是它们之间的RMQ 建树 对于我们要满足二叉搜索树的性质的时候,我们肯定按顺序加

yhhy666的博客 2755

【雕爷学编程】Arduino动手做(111)---震动提醒模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。

雕爷学编程 1898

量产导入 | 产品可靠性测试标准完整大集合(JEDEC/IEC/SAE…)

产品可靠性测试是产品质量保证中的重要一环, 包含有Pre-con, aging(寿命)和ESD(静电)等, 下面就收集了权威标准JEDEC全系列, 请参照如下 同时也附上其它的可靠性标准供大家参考及交叉理解, 可能侧重点不同, 大家可以参考下。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1663

笛卡尔树 (Cartesian Tree)

笛卡尔树是一种兼具二叉搜索树和堆性质的二叉树,它能将数组下标与数值大小建立映射关系。其核心价值包括:1)将区间最值查询(RMQ)转化为最近公共祖先(LCA)问题;2)高效解决直方图最大矩形等"左右延伸"类问题;3)揭示Treap平衡树的本质。通过单调栈可实现O(N)线性构建,相比单调栈能持久化结构关系,支持树形DP等高级操作。笛卡尔树还是实现理论最优RMQ算法(O(N)预处理+O(1)查询)的关键桥梁,通过转化为LCA问题再转为±1 RMQ问题来实现。

lifallen的博客 862

10、高阶ΣΔ调制器设计与优化

本文深入探讨了高阶ΣΔ调制器的设计与优化技术,重点介绍了NTF零点优化方法,通过分散单位圆上的零点分布提升信噪失真比(SQNR)。文章分析了量化噪声耦合技术如何有效提高噪声整形阶数,并对比了CIFB、CIFF、CRFB和CRFF等不同架构的性能特点。同时,详细阐述了基于稳定性与性能权衡的设计流程,结合Schreier的Delta-Sigma Toolbox实现NTF综合与仿真验证。内容涵盖从理论推导到实际设计步骤,为高阶ΣΔ调制器的稳定性提升与性能优化提供了系统性指导。

tgb345678的博客 134

笛卡尔树Cartesian Tree

前言 最近做题目,已经不止一次用到笛卡尔树了。这种数据结构极为优秀,但是构造的细节很容易出错。因此写一篇文章做一个总结。 笛卡尔树Cartesian Tree 引入问题 有N条的长条状的矩形,宽度都为1,第i条高度为Hi,相邻的竖立在x轴上,求最大的子矩形面积。 约定 1≤ N≤ 105 1≤ Hi≤ 109 分析 我们只需要求出每条矩形最多可以向两边拓展...

445

WINCC7.3破解文件

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

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

笛卡尔树cartesian tree

笛卡尔树cartesian tree 笛卡尔树是一种特定的二叉树数据结构,可由数列构造,在范围最值查询、范围top k查询(range top k queries)等问题上有广泛应用。它具有堆的有序性,中序遍历可以输出原数列。笛卡尔树...

chuange6363的博客 237

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

POJ-2201-Cartesian Tree(笛卡尔树)

Description Let us consider a special type of a binary search tree, called a cartesian tree. Recall that a binary search tree is a rooted ordered binary tree, such that for its every node x the fol

青春无悔 1963

POJ 2201:Cartesian Tree ← 笛卡尔树模板题

本题是笛卡尔树的模板题。 ●笛卡尔树是由一系列不同数字构成的二叉树。笛卡尔树满足堆的性质,笛卡尔树的中序遍历序列为构建其的原始序列。最小堆笛卡尔树表示满足小根堆性质的笛卡尔树。 ● 笛卡尔树的结点有两个属性:键值 val、优先级 pri。其中,键值 val 预设,优先级 pri 随机或预设。 ●笛卡尔树可由数列构造,在区间最值查询、区间 topK 查询(range top k queries)等问题上有广泛应用。

hnjzsyjyj的专栏 847

poj2201Cartesian Tree(笛卡尔树)

Cartesian Tree Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 2950   Accepted: 1122 Case Time Limit: 2000MS Description Let us consider a special type

ophunter的专栏 1605

PAT Cartesian Tree(2019年冬季考试 )——由二叉排序树到笛卡尔树

原题 A Cartesian tree is a binary tree constructed from a sequence of distinct numbers. The tree is heap-ordered, and an inorder traversal returns the original sequence. For example, given the sequence ...

net961231的博客 380

MPI进程拓扑实战:手把手教你用Cartesian Grid搭建Cannon算法实验环境

本文详细介绍了如何使用MPI的Cartesian Grid拓扑结构搭建Cannon算法实验环境,实现高效并行矩阵乘法。通过构建二维网格、优化数据分布和循环移位策略,显著提升大规模矩阵运算性能。文章包含完整的代码示例和性能优化技巧,是并行计算领域的实用指南。

weixin_30458043的博客 339

POJ 2201 Cartesian Tree 【笛卡尔树】

构造笛卡尔树。 我用的是 排序+左旋 的方式,这种方式并不是最好的构造方式,先写出来再说,今天不行了,改天在学习其他的算法。 构树技巧:增加一个虚拟的根节点,根节点的value优先级最高,可以保证此节点一直是根节点。 这道题目的数据有点……,所以不需要判断不合法的,所有的数据都可以构成笛卡尔树,所以判断NO的就可以省了。。。。⊙﹏⊙b汗 排序+左旋: #inc

智障 1445

POJ-2201 Cartesian Tree【笛卡尔树】

题目链接:http://poj.org/problem?id=2201 题目大意: 让你构造一棵笛卡尔树。 笛卡尔树的节点含有2个值,1个key,一个value,其中key是主键,value是辅键。一棵笛卡尔树就是:key升序,value升序或者降序。类似堆。 与treap的区别是:treap的value是随机值,是为了使树更加平衡引进的,而笛卡尔树的value是一个确定的值。 结构完全

飘过的小牛 3856

18.12.20 DSA Cartesian Tree

描述 Let us consider a special type of a binary search tree, called a cartesian tree. Recall that a binary search tree is a rooted ordered binary tree, such that for its every node x the following...

dhc65376的博客 197

SGU 155 Cartesian Tree(构造笛卡尔树)

题目链接:http://acm.sgu.ru/problem.php?contest=0&amp;problem=155 题意:构造笛卡尔树。 思路:笛卡尔树是一棵二叉树,树的每个节点有两个值,一个为key,一个为value。光看key的话,笛卡尔树是一棵二叉搜索树,每个节点的左子树的key都比它小,右子树都比它大;光看value的话,笛卡尔树有点类似堆,根节点的value是最小的,每个节点的...

weixin_34226182的博客 244
上一篇: C语言中随机函数的应用
下一篇: sgu 120
NeRwa
博客等级 码龄22年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值