天天看點

斜堆

merge

int merge(int x,int y)
{
    if(!x||!y) return x|y;
    if(val[x]>val[y]||(val[x]==val[y]&&x>y)) std::swap(x,y);
    return rc=merge(rc,y),std::swap(lc,rc),fa[lc]=fa[rc]=fa[x]=x,x;
}
           

pop

void pop(int x){val[x]=-1,fa[lc]=lc,fa[rc]=rc,fa[x]=merge(lc,rc);}