笛卡尔树

定义和建树这里都讲得很清楚:https://oi-wiki.org/ds/cartesian-tree/

OIWIKI大法吼哇

说白了就是拿一个栈维护以根向右的链

然后维护一下大小就好了

参考code:


	for(int i = 1; i <= n; i ++) {
		while(top) {
			if(a[sta[top]] < a[i]) {
				ch[sta[top]][1] = i;
				break;
			} else {
				ch[sta[top]][1] = ch[i][0];//有意思的操作,类似rotate
				ch[i][0] = sta[top];
				top --;
			}
		}

没了

posted @ 2019-10-27 15:05  lahlah  阅读(38)  评论(0编辑  收藏  举报