Advertisement
Guest User

Untitled

a guest
Dec 8th, 2016
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.99 KB | None | 0 0
  1. struct Treap {
  2.     static Treap *null;
  3.     int x, y;
  4.     int val, sum;
  5.     Treap *l, *r;
  6.     Treap() {
  7.         x = y = val = sum = 0;
  8.         l = r = this;
  9.     }
  10.     Treap(int x_, int v) {
  11.         x = x_;
  12.         val = sum = v;
  13.         y = rand();
  14.         l = r = null;
  15.     }
  16.     void recount() {
  17.         sum = val + l->sum + r->sum;
  18.     }
  19. };
  20.  
  21. Treap* Treap::null = new Treap();
  22.  
  23. void split(Treap *t, int x, Treap *&l, Treap *&r) {
  24.     if(t == Treap::null) {
  25.         l = r = t;
  26.         return;
  27.     }
  28.     if(t->x < x) {
  29.         l = t;
  30.         split(l->r, x, l->r, r);
  31.     } else {
  32.         r = t;
  33.         split(r->l, x, l, r->l);
  34.     }
  35.     t->recount();
  36. }
  37.  
  38. Treap* merge(Treap *l, Treap *r) {
  39.     if(l == Treap::null)
  40.         return r;
  41.     if(r == Treap::null)
  42.         return l;
  43.     if(l->y > r->y) {
  44.         l->r = merge(l->r, r);
  45.         l->recount();
  46.         return l;
  47.     } else {
  48.         r->l = merge(l, r->l);
  49.         r->recount();
  50.         return r;
  51.     }
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement