| 32 | return merge(res.first, |
| 33 | merge(new node(x, y), res.second)); } |
| 34 | node* erase(node *t, int x) { |
| 35 | if (!t) return NULL; |
| 36 | if (t->x < x) t->r = erase(t->r, x); |
| 37 | else if (x < t->x) t->l = erase(t->l, x); |
| 38 | else { node *old = t; t = merge(t->l, t->r); delete old; } |
| 39 | if (t) augment(t); return t; } |
| 40 | int kth(node *t, int k) { |
| 41 | if (k < tsize(t->l)) return kth(t->l, k); |
| 42 | else if (k == tsize(t->l)) return t->x; |
no test coverage detected