Build in O(N)
Node build(int[] arr) {
Deque stack = new ArrayDeque<>();
Node root = null;
for (int x : arr) {
Node n = new Node(x);
Node last = null;
while (!stack.isEmpty() && stack.peek().val > x) last = stack.pop();
n.left = last;
if (!stack.isEmpty()) stack.peek().right = n;
else root = n;
stack.push(n);
}
return root;
} Advertisement
Range min via LCA
Min in range [i, j] = LCA of nodes at positions i and j in Cartesian tree.
Advertisement
O(1) RMQ
Cartesian tree + Euler tour + range minimum query on tour. Preprocessing O(N), queries O(1).
Random equivalence
Cartesian tree of random permutation ≡ random BST. Height O(log N) expected.