skew_heap.cpp GitHub template <typename T> struct skew_heap { T val; skew_heap *l, *r; skew_heap(T v) : val(v), l(nullptr), r(nullptr) {} }; template <typename T> skew_heap<T> *meld(skew_heap<T> *a, skew_heap<T> *b) { if (!a) return b; if (!b) return a; if (a->val > b->val) swap(a, b); a->r = meld(a->r, b); swap(a->l, a->r); return a; } template <typename T> skew_heap<T> *push(skew_heap<T> *h, T v) { skew_heap<T> *p = new skew_heap<T>(v); return meld(h, p); } template <typename T> skew_heap<T> *pop(skew_heap<T> *h) { skew_heap<T> *res = meld(h->l, h->r); free(h); return res; } Back