首页 > 其他分享 >#2.笛卡尔树

#2.笛卡尔树

时间:2024-10-01 21:12:12浏览次数:1  
标签:笛卡尔 线段 最小值 键值 区间 复杂度

不会线性可以用线段树睡过去

笛卡尔树

0x01. 什么是笛卡尔树

定义(摘自OI wiki)

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

浅显地说:

一个小根堆(或大根堆),其中序遍历为原序列。

0x02. 为什么要使用笛卡尔树

性质(以小根堆为例):

  1. 以 \(u\) 为根的子树是一段连续的区间, 且 \(u\) 是这段区间的最小值。
  2. 任意区间 \([l, r]_{min} = LCA(l, r)\)

建树复杂度:

  • 考虑线段树维护区间最小值,查询 \(O(log_n)\), \(n\) 个数总计 \(O(nlog_n)\)
  • 考虑单调栈维护单增序列,复杂度 \(O(n)\)

0x03. 具体实现与代码

P5854 【模板】笛卡尔树

线段树实现笛卡尔树:


注意:此题数据范围 \(n \le1e7\) 无法通过


单调栈实现笛卡尔树:


标签:笛卡尔,线段,最小值,键值,区间,复杂度
From: https://www.cnblogs.com/Ydoc770/p/18443334

相关文章

  • 浅谈笛卡尔树
    [介绍(百度百科)](笛卡尔树_百度百科(baidu.com))笛卡尔树是一种特定的二叉树数据结构,可由数列构造,在范围最值查询、范围\(top_k\)查询(rangetopkqueries)等问题上有广泛应用。它具有堆的有序性,中序遍历可以输出原数列。笛卡尔树结构由Vuillmin(1980)在解决范围搜索的几何数据结......
  • 笛卡尔树
    思路如果说给你一个数组,有\(q\)组询问,询问一个区间的区间和,那么有最原始的做法。维护一个左端点和一个右端点,每次一位一位移动断点,那么时间复杂度是\(n\timesq\),那么如果我们将查询存起来,按一种我们想要的顺序去做呢?我们就可以排序,排序规则就是:B=sqrt(n);boolcmp(node......
  • 笛卡尔坐标张量简介7
    张量(tensor)这一术语最初是用来描述弹性介质各点应力状态的,后来发展成为力学和物理学的一个有力数学工具,目前力学方面的理论性文献都不同程度地这用了这一工具由坐标原点和三条不共面的标架直线构成的坐标系称为直线坐标系,如果三标架直线上的单位尺度相同,称为笛卡尔坐标系,否则称......
  • 【重学 MySQL】二十四、笛卡尔积的错误和正确的多表查询
    【重学MySQL】二十四、笛卡尔积的错误和正确的多表查询笛卡尔积的理解和错误笛卡尔积的理解定义例子在数据库中的应用总结笛卡尔积的错误正确的多表查询使用INNERJOIN使用WHERE子句(隐式内连接)总结在数据库查询中,特别是涉及到多表查询时,理解笛卡尔......
  • 笛卡尔树
    解决的问题有\(n\)个值,每个值有两个信息\((a_i,b_i)\)。你需要在这\(n\)个值间连边并形成一棵二叉树,使得:每个点的\(a_i\)满足二叉搜索树的性质。即对于所有\(v\in\text{subtree}_{lson}\)都有\(a_v\lea_u\),对于所有\(v\in\text{subtree}_{rson}\)都有\(a_v......
  • 笛卡尔树
    讲义 第1题   笛卡尔树一、定义与性质    笛卡尔树是一种特殊的二叉树数据结构,每个节点都由一对键值构成,即(k,w),其中k满足二叉搜索树的性质,而w满足堆的性质。具体来说:    二叉搜索树性质:      对于任意节点x,其左子树中的所有键值k都小于x......
  • 【数据结构】【模板】笛卡尔树
    笛卡尔树定义笛卡尔树每个节点有两种属性,一种是键值,一种是优先级。一般将位置作为键值,维护BST的性质,这样其中序遍历一定为\(1~n\)。一般将数值看作优先级,维护堆的性质。构建思路维护一个单调栈,表示现在的右链长度。我们将数组从前往后插入笛卡尔树。对于第\(i\)个......
  • 【Python】笛卡尔积 intertools.product()
    一、题目Thistoolcomputesthecartesianproductofinputiterables.Itisequivalenttonestedfor-loops.Forexample,product(A,B)returnsthesameas((x,y)forxinAfroyinB).SampleCodefromitertoolsimportproductprint(list(product([1,2,3],......
  • 理解笛卡尔积在数据库查询中的实际应用与优化
    理解笛卡尔积在数据库查询中的实际应用与优化大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!笛卡尔积是关系数据库查询中的一个基础概念,它描述了两个表之间所有可能的行组合。尽管它在某些情况下是必要的,但它也可能导致性能问题。本文将详细介绍笛卡......
  • 笛卡尔坐标转经纬度坐标
    functionfromCartesian(cartesian){constoneOverRadii={x:1.0/6378137.0,y:1.0/6378137.0,z:1.0/6356752.3142451793};constoneOverRadiiSquared={x:1.0/(6378137.0*6378137.0),y:1.0/(6378137.0*6378137.0),......