笛卡尔树(Cartesian Tree)是一种特殊的二叉树,它是由一个序列构成的,序列中每个元素都有一个对应的权值,它的根节点对应序列中的最小值,根节点的左子树是序列左边比这个最小值小的子序列构成的笛卡尔树,根节点的右子树是序列右边比这个最小值小的子序列构成的笛卡尔树。因此,笛卡尔树的性质是:
1. 笛卡尔树是一棵二叉树。
2. 序列中最小元素对应树的根节点。
3. 树的中序遍历与原序列相同。
4. 树的每个节点的权值都大于其左子树中节点的权值,小于其右子树中节点的权值。
笛卡尔树可以用于解决许多与序列有关的问题,如区间最小值、区间最大值等。由于笛卡尔树的构建过程可以用单调栈实现,因此它在许多算法竞赛中得到了广泛的应用。