首页 > 其他分享 >[NOI2009] 二叉查找树 & 笛卡尔树学习笔记

[NOI2009] 二叉查找树 & 笛卡尔树学习笔记

时间:2024-05-11 22:44:38浏览次数:30  
标签:笛卡尔 二叉 查找 NOI2009 权值 区间 dp

这个题:二叉搜索树原理认识 + 区间dp;只要熟练相关算法就一定可以做出来。但我不行。。。

我们学习一下笛卡尔树:

什么垃圾东西,不学了。

发现这个题是 l 蓝书上一道题 jqb。

二叉查找树又有一个性质:二叉查找树的中序遍历是其代表的序列从小到大排序的结果。

而无论Treap如何旋转,其都是一棵二叉查找树,因此,无论我们怎么改变数的权值,这棵树的中序遍历还是不会变的。

所以假设 \(dp(l,r,x)\) 区间 \([l,r]\),所有数的权值 >= \(x\) 的权值。

考虑二叉搜索树是怎么做区间 dp 的,枚举当前的根节点,然后加上的权值是当前区间 sum,表示新增的深度 1 * 权值。

复杂度 \(O(n^4)\)。

标签:笛卡尔,二叉,查找,NOI2009,权值,区间,dp
From: https://www.cnblogs.com/LCat90/p/18187283

相关文章

  • 笛卡尔树学习笔记
    笛卡尔树引入是一种二叉树,每个节点由一个二元组\((k,w)\)形成。\(k\)满足二叉搜索树的性质,\(w\)满足堆的性质。上面这棵笛卡尔树相当于把数组元素值当作键值\(w\),而把数组下标当作键值\(k\)。显然可以发现,这棵树的键值\(k\)满足二叉搜索树的性质,而键值\(w\)满足小根......
  • 669. 修剪二叉搜索树(leetcode)
    https://leetcode.cn/problems/trim-a-binary-search-tree/description/要点是区分在区间左边还是右边,在区间左边那么右子树也还有必要去查找删除,右边同理,返回的是删除后新树的根节点要注意函数要实现单层逻辑和完成闭环语义classSolution{//查找要删除的节点,进行......
  • 450. 删除二叉搜索树中的节点(leetcode)
    https://leetcode.cn/problems/delete-node-in-a-bst/要点是确定函数语义,单层递归逻辑,确定好有返回值的这种写法,分析出5种情况,递归的时候接收好递归的返回的新树的根节点即可classSolution{//函数语义(单层递归逻辑):查找要删除的节点,并且返回删除节点后新的树的......
  • 235. 二叉搜索树的最近公共祖先(leetcode)
    https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/要点是如果root是在p和q之间的值,意味着已经找到了最近公共祖先/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*rig......
  • 236. 二叉树的最近公共祖先(leetcode)
    https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/description/要点是后序遍历,这样就可以从树底开始搜索,寻找最近公共祖先classSolution{public://返回的是最近公共祖先,若返回null则说明没有TreeNode*lowestCommonAncestor(TreeNode*r......
  • 二叉搜索树的接口设计
    #include<stdio.h>#include<stdbool.h>#include<stdlib.h>typedefintElementType;typedefstructTNode*Position;typedefPositionBinTree;/*二叉树类型*/structTNode{/*树结点定义*/ElementTypeData;/*结点数据*/......
  • 如何根据二叉树遍历结果快速绘制二叉树
    一、已知前序遍历和中序遍历(1)前序遍历(根结点--->左子树--->右子树)ABDGHCEIF(2)中序遍历(左子树--->根结点--->右子树)GDHBAEICF注意:在最后连接二叉树时,注意先完玩左子树,再连右子树二、已知前后序遍历和中序遍历(1)后序遍历(左子树--->右......
  • 如何用递归实现二叉搜索树的增删改查
    点击查看代码/**@Author:WangYiMing*@Date:2024-04-2323:37:21*@LastEditors:WangYiMing*@LastEditTime:2024-04-2618:22:35*/#include<stdio.h>#include<stdlib.h>///@brief二叉树基础结构typedefstructbinary_tree_node{intdata;stru......
  • 二叉树
    二叉树特点:每个结点最多有两颗子树,并且子树有左右之分。把一个结点拥有的子树的数量称为结点 的度,度为0的结点称为叶子结点,度不为0称为分支结点,树的最大层数称为树的深度性质:1.非空二叉树中的叶子结点数量等于双分支结点数量+12.二叉树的第i层上最多有2^(i-1)(i>=1)......
  • 二叉树进阶:二叉搜索树、平衡二叉树、KD树(实现KNN算法的快速寻找k个邻居)
    二叉搜索树二叉搜索树又称为二叉排序树、二叉查找树。请记住,本篇所介绍的所有树,都是二叉搜索树,也就是说都用到了二分查找的思想。二叉搜索树的特征:每个结点的左结点都小于结点本身,右结点都大于结点本身。用中序遍历来遍历一棵二叉搜索树,结果必然是有序的。时间复杂度很低......