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

笛卡尔树

时间:2024-02-22 23:44:23浏览次数:24  
标签:下标 数列 笛卡尔 元素 单调 右链

笛卡尔树

定义

以一个数列为基础,存储数列中元素,满足两个限制的树。一是数列中元素的下标满足二叉搜索树的性质,二是元素的大小满足堆的性质。

建树

使用单调栈,在线建树。考虑从左往右在已有的笛卡尔树中添加元素,因为新元素的下标最大,所以只可能取代最右链中的某个元素,并将其收为左儿子。又由于堆的性质,所以右链元素单调,且弹出就不再加入,使用单调栈维护右链。每个元素加入一次删除一次,时空复杂度均为 \(O(n)\)

stk.emplace(0);
p[0]=0;//虚拟节点 
for(int i=1;i<=n;++i){
    while(!stk.empty()&&p[i]<p[stk.top()])stk.pop();
    int pos=stk.top();
    lc(i)=rc(pos);
    t[lc(i)].fa=i;
    rc(pos)=i;
    t[i].fa=pos;
    stk.emplace(i);
}

应用

RMQ问题,各种依赖于min,max的分治,然后转化到树上问题,method of four russians 算法

标签:下标,数列,笛卡尔,元素,单调,右链
From: https://www.cnblogs.com/life-of-a-libertine/p/18028442

相关文章

  • <学习笔记> 笛卡尔树
    笛卡尔树是一种二叉树,每一个节点由键值二元组\((k,w)\)构成,\(k\)满足二叉搜索树的性质,\(w\)满足堆的性质。构建我们可以用一个栈进行构建,假如我们想要求\(k\)满足二叉搜索树的性质,那么我们首先需要按\(k\)从小到大排序,然后一个一个插入;假如我们想要\(w\)满足小根......
  • 数据过多时候,子查询改成left join减少笛卡尔积
    子查询SELECT cn.portal_idASportalId, count(id)ASnumFROM construction_package_wbs_nodecnWHERE cn.delete_flag=0 AND( cn.node_type='单位工程' ORcn.node_type='分部工程' ORcn.node_type='分项工程' ORcn.no......
  • 笛卡尔积
    项目中用到了数据组合问题,使用递归实现笛卡尔积,发现报内存溢出,给出解决办法:1functionDescartes1(list){2letresultList=[];3letsrcLength=list.length;4for(leti=1;i<srcLength;i++){5letpreList=i==1?list[i-1]:r......
  • 笛卡尔树入门
    笛卡尔树的定义笛卡尔树是一种二叉树,每一个结点由一个键值二元组\((k,w)\)构成。要求\(k\)满足二叉搜索树的性质,而\(w\)满足堆的性质。一个有趣的事实是,如果笛卡尔树的\(k,w\)键值确定,且\(k\)互不相同,\(w\)互不相同,那么这个笛卡尔树的结构是唯一的。——OIwiki笛......
  • 笛卡尔积、除、(外)连接等重要关系代数求解方法 概述
    关系代数这部分知识,在软考-数据库部分是比较重要的。   有五种基本的关系代数运算,并(符号为V)、差(符号为^)、投影()、笛卡尔积、选择,补充关系代数运算有,交、连接、除、广义投影、外连接。    1、笛卡尔积,从数学角度理解,就是将集合A和集合B中所有有序对元素集合。  ......
  • python基于动态数量个列表求笛卡尔积
    需求有N个list,分别是listA,listB,listC。。。等等,N的数量不确定,现在对这些list的所有可能组合的值求笛卡尔积,比如(listA,listB),(listA,listC),(listB,listC),(listA,listB,listC)。。。求这里每个组合的笛卡尔积。分析对实现以上需求,可分解为2个部分:1.求所有list的组合2.对所......
  • 第一章:笛卡尔坐标系
    第一章:笛卡尔坐标系1.一维数学在进入三维的学习之前,先厘清一些关于数字系统和计数的问题。自然数,又称计数数字。是几千年前发明的,可能是为了跟踪记录死羊(本书作者的神奇脑洞),也是数学的萌芽。将绵羊排成一排以便计数的习惯进而导致了数字排队的概念。负债概念的出现导致了负......
  • 数据库中什么是内连接、外连接、交叉连接、笛卡尔积;MySQL 的内连接、左连接、右连接有
    一、什么是内连接、外连接、交叉连接、笛卡尔积呢内连接(innerjoin):取得两张表中满足存在连接匹配关系的记录;外连接(outerjoin):不只取得两张表中满足存在连接匹配关系的记录,还包括某张表(或者两张表)中不满足匹配关系的记录。交叉连接(crossjoin):显示两张表所有记录一一对应,没有匹配关系......
  • 【学习笔记】(29) 笛卡尔树
    定义与性质笛卡尔树是一种二叉树,每一个结点由一个键值二元组\((k,w)\)构成。要求\(k\)满足二叉搜索树的性质,而\(w\)满足堆的性质。,也就是说,对于一个节点\(i\)的左儿子\(l_i\)和右儿子\(r_i\),一定满足\(l_i<i<r_i\)(下标\(k\)满足二叉搜索树的性质)且\(v_{l_i}\)与......
  • 并,交,差,笛卡尔积
        ......