博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
笛卡尔树初学
阅读量:5364 次
发布时间:2019-06-15

本文共 423 字,大约阅读时间需要 1 分钟。

学了新算法,不管怎么样也要记录一下吧

笛卡尔树有以下两个特点:

1.是一个堆结构

2.它的中序遍历顺序等于原序列的顺序

性质:

[i,j]区间的最值等于lca(i,j)的值

如何构建?

首先先建一个0号节点,a[0]=inf

然后构建一个栈,来维护右链

栈底为root,s[top]是s[top-1]的右儿子

考虑加入元素k

判断两种情况:

  1. 它比栈顶还大。因为是单调栈,可以直接加到栈顶。
  2. 它不比栈顶大。我们只需要在栈里找到它插入的位置,把比它大的一段链全都变成它的左子树,然后再把它插入。这样,在中序遍历的时候仍然是先遍历其左子树再遍历它自身,满足第二条性质;因为左子树都比它大,显然满足性质

代码如下:

a[0]=1e9;s[top=1]=0;for (int i=1;i<=n;i++){    while (top&&a[s[top]]

 

转载于:https://www.cnblogs.com/ckr1225/p/9597954.html

你可能感兴趣的文章
typing-python用于类型注解的库
查看>>
20189215 2018-2019-2 《密码与安全新技术专题》第13周作业
查看>>
第四周作业
查看>>
一、HTML基础
查看>>
蓝牙进阶之路 (002) - HC-05与HC-06的AT指令的区别(转)
查看>>
mysql的limit经典用法及优化
查看>>
C#后台程序与HTML页面中JS方法互调
查看>>
mysql 同一个表中 字段a 的值赋值到字段b
查看>>
linux系统可执行文件添加环境变量使其跨终端和目录执行
查看>>
antiSMASH数据库:微生物次生代谢物合成基因组簇查询和预测
查看>>
UNICODE与ANSI的区别
查看>>
nginx 配置实例
查看>>
Flutter - 创建底部导航栏
查看>>
ASP.NET MVC 教程-MVC简介
查看>>
SQL Server索引 - 聚集索引、非聚集索引、非聚集唯一索引 <第八篇>
查看>>
转载:详解SAP TPM解决方案在快速消费品行业中的应用
查看>>
Android OpenGL ES 开发(N): OpenGL ES 2.0 机型兼容问题整理
查看>>
项目中用到的技术及工具汇总(持续更新)
查看>>
【算法】各种排序算法测试代码
查看>>
HDU 5776 Sum
查看>>