首页 > 其他分享 >笛卡尔树

笛卡尔树

时间:2024-07-03 22:58:45浏览次数:9  
标签:10 结点 笛卡尔 父亲 序列 劈开

引入

首先我们看到这个序列 \([9,4,10,1,7,2,3]\),现在我们找到它的最大值 \(10\),并从中间劈开,此时分为了两个序列 \([9,4]\) 和 \([1,7,2,3]\),接着对这两个序列继续这样的操作。

现在,将劈开后序列最大值和被劈开的数建立父子关系,于是便建立了这个树:

这也就是笛卡尔树。笛卡尔树满足堆,二叉搜索树的性质。

但是怎么建出这个树呢?

我们先看一下把这些结点连向其左右第一个比它大的结点的效果:

可以发现它的父亲刚好是其中较小的一个。证明也很简单,首先其父亲不可能小于它,其次,父亲一定是左右两边第一个比它大的数,如果不是那样,就只有可能是先选择离自己更远的数,再选择自己,但是还有比自己更大的数,矛盾。最后,父亲一定是较小的那个,因为较大的那个肯定更先选择,所以较小的才是父亲。

标签:10,结点,笛卡尔,父亲,序列,劈开
From: https://www.cnblogs.com/yaosicheng124/p/18282579

相关文章

  • 基环树和笛卡尔树
    基环树就是比平常的树多一条边,有\(n\)条边,也就有一个环在里面。基本思想就是断环,跑树形\(dp\),或者用拓扑排序判环去跑环形\(dp\)。树的直径今天才了解到的,用两遍\(dfs\)跑。首先第一遍找到离根节点最远的节点\(u_1\),然后再从\(u_1\)找到离它最远的节点\(u_2\),那么......
  • 基环树和笛卡尔树
    1.基环树定义:有\(n\)个点和\(n\)条边的图,就是给树连了一条边,此时图中恰好只有一个环解决这类问题时,通常断环,变成普通的树的问题,然后再特殊处理环P2607[ZJOI2008]骑士click断环成树后就跟没上司一样是个树形dp,注意森林,longlong就行了,具体细节见这里P5022[NOIP2018提高组......
  • 过滤条件之分组 group by、having、distinct、order by、limit、正则、多表查询和子查
    【一】过滤条件之分组groupby【1】引入--按照指定条件对所有数据进行分组--对员工进行分组按照年龄/部门--...select*from*where*groupby*;【2】按照部门分组(1)查询数据select*fromempgroupbypost;#第一次使用部门分组会报错mysql>select*f......
  • 笛卡尔树
    笛卡尔树引入笛卡尔树是一种二叉树,每一个节点由一个键值二元组\((k,w)\)构成。要求k满足二叉搜索树的性质,而w满足堆的性质。一个有趣的事实是,如果笛卡尔树的\(k,w\)键值确定,且k互不相同,w互不相同,那么这个笛卡尔树的结构是唯一的。上面这棵笛卡尔树相当于把数组元素当作键值w,......
  • 赛克oj The diameter of a rectangle(笛卡尔树)
    赛氪OJ-专注于算法竞赛的在线评测系统(saikr.com)这题是hduoj1506的加强版,区别在于宽度不是固定为1了,思路差不多,也是使用笛卡尔树。参考hduoj1506(笛卡尔树)-Venux-博客园(cnblogs.com)1#defineIOstd::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)2#definebu......
  • hduoj 1506(笛卡尔树)
    Problem-1506(hdu.edu.cn)题意坐标轴给定一些矩形,紧密排在一起,每个矩形宽度固定为1,问形成的图案中最大可以组成的矩形面积。思路常规思路是可以用单调栈分别找两边的合法边界,这里使用笛卡尔树。笛卡尔树实现了堆的性质,并且对原数组建立的笛卡尔树进行中序遍历为原数组的顺......
  • [NOI2009] 二叉查找树 & 笛卡尔树学习笔记
    这个题:二叉搜索树原理认识+区间dp;只要熟练相关算法就一定可以做出来。但我不行。。。我们学习一下笛卡尔树:什么垃圾东西,不学了。发现这个题是l蓝书上一道题jqb。二叉查找树又有一个性质:二叉查找树的中序遍历是其代表的序列从小到大排序的结果。而无论Treap如何旋转,其都......
  • 笛卡尔树学习笔记
    笛卡尔树引入是一种二叉树,每个节点由一个二元组\((k,w)\)形成。\(k\)满足二叉搜索树的性质,\(w\)满足堆的性质。上面这棵笛卡尔树相当于把数组元素值当作键值\(w\),而把数组下标当作键值\(k\)。显然可以发现,这棵树的键值\(k\)满足二叉搜索树的性质,而键值\(w\)满足小根......
  • 生成带重复的笛卡尔乘积过程 Cartesian Product with Repetition
    目录WhatisCartesianProductwithRepetitionCodeDemoWhatisCartesianProductwithRepetition比如说有两个集合:\(\{1,2,3\}\)\(\{A,B,C\}\)想把他们组合成所有可能组合,比如,1AAA1AAB1AAC...这种组合可以称为"有重复的笛卡尔积"或"带重复的笛卡尔乘积"(Carte......
  • 笛卡尔树
    笛卡尔树实际上就是对于多个二元组\((k_i,w_i)\)的一棵树,使其所有\(k\)值满足二叉搜索树的性质,且所有\(w\)值都满足小根堆的性质。在构建时,对于右链上的元素,自底向上一定是\(w\)值由小到大的,且一定\(k\)值从小到大。所以我们按\(k\)值从小到大排序,比并按顺序插入右......