笛卡尔树

概念


一个区间的最小值作为根节点,然后左子树就是最小值左边区间的点,右子树是最小值右边区间的点,然后也是同理,左子树的根是左边区间的最小值,右子树一致

性质

板子:

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); 
	}	
} 

例题:

posted @ 2024-12-24 17:54  MENDAXZ  阅读(1)  评论(0编辑  收藏  举报