Structure
class TreapNode {
int key, priority;
TreapNode left, right;
TreapNode(int k) { key = k; priority = random(); }
}Advertisement
Insert with rotations
TreapNode insert(TreapNode t, int key) {
if (t == null) return new TreapNode(key);
if (key < t.key) {
t.left = insert(t.left, key);
if (t.left.priority > t.priority) t = rotateRight(t);
} else {
t.right = insert(t.right, key);
if (t.right.priority > t.priority) t = rotateLeft(t);
}
return t;
}Advertisement
Merge + split primitives
Treaps support merge(t1, t2) if all keys in t1 < keys in t2. Split(t, key) returns (t_less, t_geq). Powers persistent + implicit treaps.
Implicit treap
Use array index as key (position). Enables O(log N) array-with-inserts, reverse-range, cyclic shift.