笛卡尔树
概念
一个区间的最小值作为根节点,然后左子树就是最小值左边区间的点,右子树是最小值右边区间的点,然后也是同理,左子树的根是左边区间的最小值,右子树一致
性质
板子:
int a[N],l[N],r[N],root,n;
void build(){
//单调栈维护右链
stack<int> st;
for(int i=1;i<=n;i++){
int last=0;
while(!st.empty()&&a[st.top()]>a[i]){
last=st.top();
st.pop();
}
if(!st.empty()) r[st.top()]=i;
else root=i;
l[i]=last;
st.push(i);
}
}