#include using namespace std; #define fo(a,b) for(int a=0;a<(b);++a) using ll = long long; struct Treap { int h; int p; Treap * l=0; Treap * r=0; }; void print(Treap * a, int tab=0) { if(!a) return; print(a->l,tab+1); for(int i=0;ih,a->p); print(a->r,tab+1); } Treap * merge(Treap * l, Treap * r) { if(!l) return r; if(!r) return l; if(l->p < r->p) { l->r = merge(l->r, r); return l; } else { r->l = merge(l, r->l); return r; } } void split(Treap * t, int v, Treap *& l, Treap *& r) { if(!t) l=r=NULL; else if(t->h < v) { l=t; split(t->r, v, t->r, r); } else { r=t; split(t->l, v, l, t->l); } } void insert(Treap *& t, Treap * a) { Treap *l, *r; split(t, a->h, l, r); t = merge(merge(l,a), r); } int main(int argc, char ** argv) { Treap * t=0; while(1) { int x; scanf("%d",&x); Treap * a = new Treap; a->h = x; a->p = rand(); insert(t, a); print(t); } return 0; }