【笛卡尔树】

news2025/5/10 20:41:15

笛卡尔树

  • 笛卡尔树
      • 定义
      • 构建
      • 性质
    • 习题
      • P6453 [COCI 2008/2009 #4] PERIODNI
      • CF1913D Array Collapse
      • P4755 Beautiful Pair
      • [ARC186B] Typical Permutation Descriptor

笛卡尔树

定义

笛卡尔树是一种二叉树,每一个节点由一个键值二元组 ( k , w ) (k,w) (k,w) 构成。要求 k k k 满足二叉搜索树的性质,而 w w w 满足堆的性质。如果笛卡尔树的 k , w k,w k,w 键值确定,且 k k k 互不相同, w w w 也互不相同,那么这棵笛卡尔树的结构是唯一的。

通俗的讲,笛卡尔树是一个二叉树,中序遍历是原序列,同时满足堆性质。

构建

以小根堆笛卡尔树为例。

法1
在这里插入图片描述
观察上图笛卡尔树,我们发现,一个节点的父亲就是 左边第一个比它小的右边第一个比它小的 的较大的那个。

写个单调栈来回跑两遍即可。

法2
我们考虑将元素按下标顺序依次插入到当前的笛卡尔树中。那么每次我们插入的元素必然在这棵树的右链(右链:即从根节点一直往右子树走,经过的节点形成的链)的末端。于是我们执行这样一个过程,从下往上比较右链节点与当前节点 u u u w w w,如果找到了一个右链上的节点 x x x 满足 w x < w u w_x<w_u wx<wu,就把 u u u 接到 x x x 的右儿子上,而 x x x 原本的右子树就变成 u u u 的左子树。

下图红框部分就是我们始终维护的右链:

在这里插入图片描述
模板P5854

	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		while(Sid&&a[S[Sid]]>a[i])
			Sid--;
		l[i]=S[Sid+1];
		if(Sid)
			r[S[Sid]]=i;
		S[++Sid]=i;
		S[Sid+1]=0;
	}

性质

  • 区间 [ l , r ] [l,r] [l,r] 的极值所在为 l , r l,r l,r 在笛卡尔树上的 LCA。
  • 每个数左右两边第一个比它大/小的数分别是它在笛
    卡尔树上的父亲和“拐点祖先”。
  • 随机笛卡尔树的树高是 O ( log ⁡ n ) O(\log n) O(logn) 的。

习题

P6453 [COCI 2008/2009 #4] PERIODNI

在这里插入图片描述

1 ≤ n , k ≤ 500 1\le n,k\le 500 1n,k500,层高不会超过 1 0 6 10^6 106

考虑在第 i i i 列和第 j j j 列 的第 h h h 层都放了一个数,那么要求中间断开,即 min ⁡ k = i j a i < h \min_{k=i}^j a_i <h mink=ijai<h,其中 a i a_i ai 为第 i i i 列层数。

考虑建出小根堆笛卡尔树。

在这里插入图片描述

分成了若干矩形,树形DP即可。

CF1913D Array Collapse

link

在这里插入图片描述
1 ≤ n ≤ 3 × 1 0 5 , 1 ≤ p i ≤ 1 0 9 1\le n\le 3\times 10^5,1\le p_i \le 10^9 1n3×105,1pi109

  • 考虑建立一棵小根堆笛卡尔树。
  • 每个子树的根节点对应一段区间 [ l , r ] [l,r] [l,r] 的最小值的位置 x x x
  • 左子树表示 [ l , x − 1 ] [l,x-1] [l,x1],右子树表示 [ x + 1 , r ] [x+1,r] [x+1,r]
  • f u f_u fu 表示以 u u u 为根(即区间 [ l , r ] [l,r] [l,r] )的方案数,也记为 f [ l , r ] f[l,r] f[l,r]
  • 如果不删除 u u u,方案为 f [ l , x − 1 ] × f [ x + 1 , r ] f[l,x-1] \times f[x+1,r] f[l,x1]×f[x+1,r]
  • 考虑删除 u u u,因为是在笛卡尔树上 dp。
  • 所以如果 l > 1 l>1 l>1,那么 u u u 可以被左边删掉,方案数为 f [ x + 1 , r ] f[x+1,r] f[x+1,r]
  • 同理 r < n r<n r<n,方案数为 f [ l , x − 1 ] f[l,x-1] f[l,x1]
  • 如果都能被两边删除,算重的方案为 1 1 1(全部删掉)。

P4755 Beautiful Pair

link
在这里插入图片描述
1 ≤ n ≤ 1 0 5 , 1 ≤ a i ≤ 1 0 9 1\le n \le 10^5,1\le a_i\le 10^9 1n105,1ai109

  • 考虑建立一棵大根堆笛卡尔树。
  • 同上一题,每个子树的根节点对应一段区间 [ l , r ] [l,r] [l,r] 的最大值的位置 x x x
  • 类似分治,考虑计算跨过 x x x 的方案数。
  • 枚举短的一边(不妨假设是左边),设 i ∈ [ l , x ] i\in[l,x] i[l,x],那么需要查询 [ x , r ] [x,r] [x,r] ≤ a x a i \large \le \frac{a_x}{a_i} aiax的数的个数。
  • 容易证明枚举次数不超过 n log ⁡ n n\log n nlogn次。
  • 直接主席树维护即可。

[ARC186B] Typical Permutation Descriptor

link

在这里插入图片描述

1 ≤ N ≤ 3 × 1 0 5 , 0 ≤ A i < i 1\le N \le 3\times 10^5,0\le A_i< i 1N3×105,0Ai<i

不难发现 P A i P_{A_i} PAi 即是 i i i 左边第一个比 A i A_i Ai 小的数,根据这一点建立笛卡尔树,则原问题变为在笛卡尔树上填数的方案数,简单DP即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2297955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java String 类深度解析:内存模型、常量池与核心机制

目录 一、String初识 1. 字符串字面量的处理流程 (1) 编译阶段 (2) 类加载阶段 (3) 运行时阶段 2. 示例验证 示例 1&#xff1a;字面量直接赋值 示例 2&#xff1a;使用 new 创建字符串 示例 3&#xff1a;显式调用 intern() 注意点1&#xff1a; ⑴. String s1 &q…

探索顶级汽车软件解决方案:驱动行业变革的关键力量

在本文中&#xff0c;将一同探索当今塑造汽车行业的最具影响力的软件解决方案。从设计到制造&#xff0c;软件正彻底改变车辆的制造与维护方式。让我们深入了解这个充满活力领域中的关键技术。 设计软件&#xff1a;创新车型的孕育摇篮 车辆设计软件对于创造创新型汽车模型至…

TikTok走红全球:中国短视频平台以全新姿态登陆海外市场

在数字化浪潮中&#xff0c;短视频已经成为全球年轻人表达自我、分享生活的重要方式。TikTok&#xff0c;这个起源于中国的短视频平台&#xff0c;以其独特的魅力和创新的功能在全球范围内迅速走红。本文将探讨TikTok如何以全新姿态登陆海外市场&#xff0c;并分析其成功的关键…

计算机毕业设计Python旅游评论情感分析 NLP情感分析 LDA主题分析 bayes分类 旅游爬虫 旅游景点评论爬虫 机器学习 深度学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

day9手机创意软件

趣味类 in:记录趣味生活&#xff08;通用&#xff09; 魔漫相机&#xff1a;真人变漫画&#xff08;通用&#xff09; 活照片&#xff1a;让照片活过来&#xff08;通用&#xff09; 画中画相机&#xff1a;与众不同的艺术 年龄检测仪&#xff1a;比一比谁更年轻&#xf…

A001基于SpringBoot实现的小区物业管理系统

系统介绍 基于SpringBoot实现的小区物业管理系统是为物业管理打造的一款在线管理平台&#xff0c;它可以实时完成信息处理&#xff0c;对小区信息、住户等进行在线管理&#xff0c;使其系统化和规范化。 系统功能说明 1、系统共有物业、业主角色&#xff0c;物业拥有系统最高…

【Uniapp】关于实现下拉刷新的三种方式

在小程序、h5等地方中&#xff0c;常常会用到下拉刷新这个功能&#xff0c;今天来讲解实现这个功能的三种方式&#xff1a;全局下拉刷新&#xff0c;组件局部下拉刷新&#xff0c;嵌套组件下拉刷新。 全局下拉刷新 这个方式简单&#xff0c;性能佳&#xff0c;最推荐&#xf…

深入理解DeepSeek与企业实践(二):32B多卡推理的原理、硬件散热与性能实测

前言 在《深入理解 DeepSeek 与企业实践&#xff08;一&#xff09;&#xff1a;蒸馏、部署与评测》文章中&#xff0c;我们详细介绍了深度模型的蒸馏、量化技术&#xff0c;以及 7B 模型的部署基础&#xff0c;通常单张 GPU 显存即可满足7B模型完整参数的运行需求。然而&…

数据结构-链式二叉树

文章目录 一、链式二叉树1.1 链式二叉树的创建1.2 根、左子树、右子树1.3 二叉树的前中后序遍历1.3.1前(先)序遍历1.3.2中序遍历1.3.3后序遍历 1.4 二叉树的节点个数1.5 二叉树的叶子结点个数1.6 第K层节点个数1.7 二叉树的高度1.8 查找指定的值(val)1.9 二叉树的销毁 二、层序…

【云安全】云原生- K8S etcd 未授权访问

什么是etcd&#xff1f; etcd 是一个开源的分布式键值存储系统&#xff0c;主要用于存储和管理配置信息、状态数据以及服务发现信息。它采用 Raft 共识算法&#xff0c;确保数据的一致性和高可用性&#xff0c;能够在多个节点上运行&#xff0c;保证在部分节点故障时仍能继续提…

AI时代的前端开发:对抗压力的利器

在飞速发展的AI时代&#xff0c;前端开发工程师们面临着前所未有的挑战。项目周期不断缩短&#xff0c;需求变化日新月异&#xff0c;交付压力更是与日俱增&#xff0c;这使得开发人员承受着巨大的压力。如何提升对抗压能力&#xff0c;成为摆在每一位前端工程师面前的重要课题…

在npm上传属于自己的包

前言 最近在整理代码&#xff0c;上传到npm方便使用&#xff0c;所以学习了如何在npm发布一个包&#xff0c;整理写成一篇文章和大家一起交流。 修改记录 更新内容更新时间文章第一版25.2.10新增“使用包”&#xff0c;“删除包的测试”25.2.12 1、注册npm账号 npm | Home 2…

[Spring] Spring常见面试题

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

22.4、Web应用漏洞分析与防护

目录 Web应用安全概述DWASP Top 10Web应用漏洞防护 - 跨站脚本攻击XSSWeb应用漏洞防护 - SQL注入Web应用漏洞防护 - 文件上传漏洞Web应用漏洞防护 - 跨站脚本攻击XSS Web应用安全概述 技术安全漏洞&#xff0c;主要是因为技术处理不当而产生的安全隐患&#xff0c;比如SQL注入…

SpringBoot实战:高效获取视频资源

文章目录 前言技术实现SpringBoot项目构建产品选取配置数据采集 号外号外 前言 在短视频行业高速发展的背景下&#xff0c;海量内容数据日益增长&#xff0c;每天都有新的视频、评论、点赞、分享等数据涌现。如何高效、精准地获取并处理这些庞大的数据&#xff0c;已成为各大平…

迅为RK3568开发板篇OpenHarmony实操HDF驱动配置LED-LED测试

将编译好的镜像全部进行烧写&#xff0c;镜像在源码根目录 out/rk3568/packages/phone/images/目录下。 烧写完成之后&#xff0c;在调试串口查看打印日志&#xff0c;如下图所示&#xff1a; 然后打开 hdc 工具&#xff0c;运行测试程序&#xff0c;输入“led_test 1”&…

OpenGL ES -> 投影变换矩阵完美解决绘制GLSurfaceView绘制图形拉伸问题

GLSurfaceView绘制图形拉伸问题 假如在XML文件中声明GLSurfaceView的宽高为 android:layout_width"match_parent"android:layout_height"match_parent GLSurfaceView绘制的图形在Open GL ES坐标系中&#xff0c;而Open GL ES坐标系会根据GLSurfaceView的宽高将…

玩转大语言模型——使用Kiln AI可视化环境进行大语言模型微调数据合成

系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——三分钟教你用langchain提示词工程获得猫娘女友 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型—…

图书管理项目(spring boot + Vue)

想要该项目的话&#xff0c;就 jia 我&#xff0c;并在评论区给我说一下&#xff0c;只需要1元&#xff0c;我把整个项目发给你 jia微&#xff1a;18439421203&#xff08;名字叫&#xff1a;Bingo&#xff09; 运行图片&#xff1a;

【机器学习】简单线性回归算法及代码实现

线性回归算法 一、摘要二、线性回归算法概述三、损失函数的定义和衡量标准四、简单线性回归的求解和应用五、机器学习算法一般求解思路 一、摘要 本文讲解了线性回归算法的基础知识和应用&#xff0c;强调线性回归主要用于解决回归问题。通过分析房产价格与房屋面积的关系&…