笛卡尔树
笛卡尔树:
笛卡尔树是关于多个二元组
- 构建方法:
在构建时,对于右链上的元素,自底向上一定是
所以我们按
假设我们轮到第
使用栈模拟即可。
qwq
for(int i = 1; i <= n; i++){ while(top && a[stk[top]] > a[i]) top--; ls[i] = stk[top + 1]; if(top) rs[stk[top]] = i; stk[++top] = i; stk[top + 1] = 0; }
- 性质:
-
一个节点
的子树内的子节点的值一定均小于等于该节点的值,若它的管辖区间是 ,则对于 ,则 。 -
一个区间
的最值位置是 , 在笛卡尔树上的 。 -
对于一个
,它左边第一个大于等于它的 在笛卡尔树上是它向左的拐点祖先,右边同理。 -
对于一个有
个节点且随机的笛卡尔树,树高期望为 。
例题:
本文作者:Little_corn
本文链接:https://www.cnblogs.com/little-corn/p/18320162
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步