【模版】笛卡尔树

void build()
{
    int top=0;
    for(int i=1;i<=n;i++)
    {
        int k=top;
        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;
    }
}

事实上,stk[1]为栈底,即笛卡尔树的根。

posted @ 2025-10-03 21:51  Astral_Plane  阅读(4)  评论(0)    收藏  举报