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

笛卡尔树

时间:2024-11-27 10:43:44浏览次数:6  
标签:rs int siz 笛卡尔 dfs stk ls

板子题

符合堆和二叉搜索树性质,treap也是一种特殊笛卡尔树

堆性质就是树下层元素的值都小于等于或大于等于上层元素的值

二叉搜索树是一个左儿子小于自身,右儿子大于自身的树,在笛卡尔树中,通常为数组索引

这时候就可以用单调栈来维护右链建树

#include<iostream>
#include<algorithm>
using namespace std;
#define pb push_back
#define LL long long

const int N = 3e5 + 10;
int a[N], n, m, stk[N], k, ls[N], rs[N];
LL ans = 0;

int dfs(int x) {
    int siz = 1;
    if (ls[x]) 
        siz += dfs(ls[x]);
    if (rs[x]) 
        siz += dfs(rs[x]);
    ans = max (ans, 1ll * a[x] * siz);
    return siz;
}

void solve() {
    int top = 0;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        while(k > 0 && a[stk[k]] >= a[i]) k--;
        if (k) rs[stk[k]] = i;
        if (k < top) ls[i] = stk[k + 1];
        stk[++k] = i;
        top = k;
    }
    dfs(stk[1]);
    cout << ans << endl;
    for (int i = 1; i <= n; i++) ls[i] = rs[i] = 0;
    k = ans = 0;
}
    

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t = 1;
    // cin >> t;
    while(1) {
        cin >> n;
        if (!n) break;
        solve();
    }
    return 0;
}

标签:rs,int,siz,笛卡尔,dfs,stk,ls
From: https://www.cnblogs.com/lyrrr/p/18571806

相关文章

  • 基环树和笛卡尔树总结
    一个图论,一个半数据结构。咱也不知道为啥这两个毫无关联的东西会放在一块。基环树(环套树)一些定义基环树:一张有\(N\)个点和\(N\)条边的图,如果不保证连通的话,那么整张图是一张基环树森林。并且如果将环上的任意一条边去除,那么整棵基环树会成为一棵普通的树。内向树:一棵所......
  • 【Matlab 六自由度机器人】笛卡尔空间规划和关节空间规划(附MATLAB建模代码)
    笛卡尔空间规划和关节空间规划近期更新前言正文1.笛卡尔空间规划特点:步骤:2.关节空间规划特点:步骤:3.两种方法的区别4.MATLAB代码:机械臂避障路径规划问题和解答4.1关节空间规划方法4.2笛卡尔空间规划方法4.3规划方法的比较5.路径规划优化5.1平滑性优化5.2速度......
  • 【重学 MySQL】二十四、笛卡尔积的错误和正确的多表查询
    【重学MySQL】二十四、笛卡尔积的错误和正确的多表查询笛卡尔积的理解和错误笛卡尔积的理解定义例子在数据库中的应用总结笛卡尔积的错误正确的多表查询使用INNERJOIN使用WHERE子句(隐式内连接)总结在数据库查询中,特别是涉及到多表查询时,理解笛卡尔......
  • 【数据结构】【模板】笛卡尔树
    笛卡尔树定义笛卡尔树每个节点有两种属性,一种是键值,一种是优先级。一般将位置作为键值,维护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),......
  • 经纬度坐标转笛卡尔坐标
    functionfromDegrees(longitude,latitude,height=0.0){longitude=(longitude*Math.PI)/180.0;latitude=(latitude*Math.PI)/180.0;constradiiSquared={x:6378137.0*6378137.0,y:6378137.0*6378137.0,z:6356752.31424517......
  • 笛卡尔树
    笛卡尔树:笛卡尔树是关于多个二元组\((k_i,w_i)\)的一棵树,使其所有\(k\)值满足二叉搜索树的性质,且所有\(w\)值都满足小根堆的性质。笛卡尔树有一些关于区间最值的美好性质,常常用于处理关于区间最值的问题。构建方法:在构建时,对于右链上的元素,自底向上一定是\(w\)值由小......
  • 笛卡尔树
    \(\texttt{0x00}\):前置芝士二叉搜索树堆单调栈\(\texttt{0x01}\):概念笛卡尔树是一种二叉树,每一个结点由一个键值二元组\((k,w)\)构成。要求\(k\)满足二叉搜索树的性质(左小右大),而\(w\)满足堆的性质(大根堆或小根堆)。q1:这么一看,Treap不也是笛卡尔树?a1:正确的。一个有......