struct tree { int l,r,w,d; }t[N]; int merge(int k1,int k2) { if(k1==0||k2==0)return k1+k2; if(t[k1].w>t[k2].w)swap(k1,k2); t[k1].r=merge(t[k1].r,k2); if(t[t[k1].l].d<t[t[k1].r].d)swap(t[k1].l,t[k1].r); t[k1].d=t[t[k1].r].d+1; return k1; }
struct tree { int l,r,w,d; }t[N]; int merge(int k1,int k2) { if(k1==0||k2==0)return k1+k2; if(t[k1].w>t[k2].w)swap(k1,k2); t[k1].r=merge(t[k1].r,k2); if(t[t[k1].l].d<t[t[k1].r].d)swap(t[k1].l,t[k1].r); t[k1].d=t[t[k1].r].d+1; return k1; }