根据某度百科
笛卡尔树是一棵二叉树,树的每个节点有两个值,一个为key,一个为value。光看key的话,笛卡尔树是一棵二叉搜索树,每个节点的左子树的key都比它小,右子树都比它大;光看value的话,笛卡尔树有点类似堆,根节点的value是最小(或者最大)的,每个节点的value都比它的子树要小(或者大)
个人感觉就是一棵不随机的treap?
性质:任一子树的中序遍历都是原数列中的一段连续区间
构造:
O(n2) : 按key值升序插入 插入cur时
从右侧路径找到一个点i 使得value[i] < value[cur] < value[right[i]]
然后使 left[cur] = right[i]; right[i] = cur;
O(n) : 由于树的右链上value和key都是递增的
所以考虑单调栈维护