[学习笔记]笛卡尔树[通俗易懂]

[学习笔记]笛卡尔树[通俗易懂][学习笔记]笛卡尔树

大家好,又见面了,我是你们的朋友全栈君。

笛卡尔树Cartesian Tree

前言

[学习笔记]笛卡尔树[通俗易懂]

符合:祖先权值优先级更高,中序遍历是序列本身

类比treap,只不过不平衡

 

既然不如treap平衡,支持操作就少了。

那么支持的操作,复杂度必须要更优了。

 

建树

增量法

i=1~n

用单调栈维护最右边路径上的点

加入i点,从底向上找到第一个能放的位置,放上去,从栈中弹出的链就是左儿子。

中序遍历性质显然可以保证

权值优先级显然可以保证

O(n)

(所以Treap也可以O(n)建树)

 

例题:

[学习笔记]笛卡尔树[通俗易懂]

求最大矩形

 

1.单调栈直接做。

2.建立小根堆笛卡尔树,每个点的贡献是:子树sz*高度。正确性显然

 

例题2:

 bzoj2616: SPOJ PERIODNI——笛卡尔树+DP

 

例题3:

• 对于任意排列,定义其权值为:
• 首先求出排列的笛卡尔树
• 对于树上有两个儿子的节点,设儿子的下标位置为 ? 和 ?
• 版本一:其对权值的贡献为 |pa-pb|
• 版本二:其对权值的贡献为 |? − ?|
• 假设排列等概率随机,求权值的期望
• ? ≤ 100

两种不同的思路:

版本一:

 

关心儿子位置,

f[i][j]大小为i的树,根节点在j位置权值

枚举左儿子和右儿子的位置a,b,再分配编号:C(i-1,a)

可以把f[i][a]+a之类放在一起进行前缀和优化

纯粹从计数考虑,还要维护方案数

 

个数从小到大扩展,位置合并并分配编号

还有相对设法

 

版本二:

权值绝对值要去掉,从小到大加入

大的树就是放到叶子了

拼接的时候贡献还要考虑父亲权值不好处理

如果有些点必然会有叶子,那么放下一个权值之前,这些位置直接贡献cnt的答案

类似放书那个题

f[i][j][k]放了前i个数,有j个位置还少两个叶子,k个位置还少一个叶子(对未来承诺!)

 

合并

%%immortalCO

数据结构杂题集第三个有提到

定义关键点:一个树最左边和最右边两个链

关键点只有初始的O(n)个

合并x,y时候,对于x的右链和y的左链,从最底下开始往上找到第一个能放的位置,这一段长度设为len

之后这段关键点会被覆盖住,不再存在。

然后y的这个点左儿子和x的这个点的右儿子进行类似fhq的合并,也就是一般的暴力合并

由于路径上的点就是两个段的关键点

关键点然后就消失了。

走的长度就是关键点减少的个数

所以均摊O(n)

从最底下开始找,可以用链表然后链表合并。单纯记录每个点最右边的点也可以

sz什么的pushup就找到了。

(pushup这个不太好找到,最开始一段链很难搞。可以用LCT同时和笛卡尔树合并做,用于打上标记)

挺trick的

 

感悟

具有“treap”的两个性质

对于需要支持操作比较简单的题目,尤其对于序列上有关大小的问题,笛卡尔树的优秀结构可以使得处理有计可施

 

转载于:https://www.cnblogs.com/Miracevin/p/10373626.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107015.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • FM &FFM:深入理解FM与FFM「建议收藏」

    FM &FFM:深入理解FM与FFM「建议收藏」0.引言针对类别变量进行oner-hot编码后的高维稀疏矩阵M,可以表示如下:可以看出,经过One-Hot编码之后,大部分样本数据特征是比较稀疏的,One-Hot编码的另一个特点就是导致特征空间大。例如,电影品类有550维特征,一个categorical特征转换为550维数值特征,特征空间剧增。同时通过观察大量的样本数据可以发现,某些特征经过关联之后,与label之间的相关…

    2022年6月3日
    29
  • Visual Studio 2017 – Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d…

    Visual Studio 2017 – Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d…

    2021年6月9日
    175
  • 操作系统期末总复习(题库)[通俗易懂]

    操作系统期末总复习(题库)[通俗易懂]问答题什么是操作系统,主要功能有哪些?操作系统:计算机最基本最重要的基础性系统软件,可以使计算机系统能协调、高效和可靠地进行工作主要功能:处理器管理、存储器管理、设备管理、文件管理、作业管理等功能模块什么是微内核技术,主要有哪些功能?微内核技术把操作系统中更多的成分和功能放到更高的层次(即用户模式)中去运行,而留下一个尽量小的内核,用它来完成操作系统最基本的核心功能,称这种技术为微内核技术。主要功能:进程(线程)管理、低级存储器管理、中断和陷入处理等功能。简述进程的基本状态及状态之间的转换

    2022年6月1日
    227
  • 2022年比较有前景的行业_2021idea创建web项目

    2022年比较有前景的行业_2021idea创建web项目为什么要用WebIDE?IDE是集成开发环境(IntegratedDevelopmentEnvironment)的缩写。在以前,开发者一般是将IDE下载到本地,安装、配置后再开始开发。但随着Web技术的持续发展,就像绝大部分办公者已经在工作中使用在线文档来代替传统Office软件一样,越来越多的开发者开始尝试在线编写代码。结合云计算和容器的能力,使用WebIDE来开发应用程序更加方便、快捷,也拥有更强的扩展性。最有前景的WebIDE通过对市面上大量.

    2022年10月17日
    2
  • SQL Server 2019 安装教程[通俗易懂]

    SQLServer2019安装教程下载安装SQL:1、下载SQLServer2019Developer官方网址:下载地址。2、下拉选择免费版本,直接点击下载(别问,问就是家境贫寒????)。3、双击启动安装文件,示例:4、等待…5、选择基本安装类型,示例:6、选择语言:中文(简体),然后点击接受。示例:7、根据自己的需求,选择合适的安装路径,最后点击安装。示例:…

    2022年4月6日
    229
  • Linux基础(较全)

    Linux基础(较全)Linux0 目录文章目录 Linux0 目录 1 Linux 简介 1 1Linux 是什么 1 2Linux 发行版 1 3LInux 应用领域 1 4LinuxvsWind 2 Linux 安装 2 1 系统分区 2 2 注意事项 3 常用目录结构 4 常用命令 5 VI 编辑器 5 1 编辑模式 5 1 1 模式切换 5 1 2 移动光标 5 1 3 编辑 5 1 4 退出 5 2 输入模式 5 3 末行模式 6 软件安装 6 1 二进制包安装 6 1 1RPM 包安装 6 1 2yum 安装 6 2 源码包安装 7 用户管理 7 1

    2025年7月17日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号