笛卡尔树
笛卡尔树
其实也没什么好说的,这里就稍微总结一下
笛卡尔树中每个节点存在优先值和键值,其中按照键值构成二叉搜索树,而优先值满足父亲的优先值大于儿子节点
构造方法可以通过\(\tt ST\)表或线段树等\(O(n\log n)\)实现,也可以使用单调栈\(O(n/n\log n)\)实现
按照键值从小到大将节点插入笛卡尔树中,过程中维护最右的一条链,使用单调栈进行维护
不断弹出优先值小于当前节点的节点,将最后弹出的一个设为其左儿子,将自己作为栈顶元素的右儿子
可以证明,这样得到的满足笛卡尔树的性质
笛卡尔树存在一些性质:
- 对于键值/优先值互不相同的序列,其形成的笛卡尔树唯一
- 对于序列\(a\),以键值\(i\)优先值\(a_i\)建出的笛卡尔树,区间\([l,r]\)的最大值为\(a_{\tt lca(l,r)}\)
所以这样我们就可以得到\(O(q+n\alpha(n))\)的离线区间最小值算法,以及\(O((n+q)\log\log n)\)的在线区间最小值算法
for(int i=1;i<=s;++i){
int la=0;
while(sta.size()&&a[sta.top()]>a[i])la=sta.top(),sta.pop();
ch[i][0]=la;
if(sta.size())ch[sta.top()][1]=i;sta.push(i);
}while(sta.size()>1)sta.pop();
```
因果乃旋转纺车,光彩之多面明镜
浮世苍茫,不过瞬逝幻梦
善恶爱诳,皆有定数
于命运之轮中
吞噬于黄泉之冥暗
呜呼,吾乃梦之戍人
幻恋之观者
唯于万华镜中,永世长存
浮世苍茫,不过瞬逝幻梦
善恶爱诳,皆有定数
于命运之轮中
吞噬于黄泉之冥暗
呜呼,吾乃梦之戍人
幻恋之观者
唯于万华镜中,永世长存

浙公网安备 33010602011771号