可并堆(左偏树)

左偏树一种特殊的堆

可以快速合并两个堆

定义为x到达的最远的右边的点的距离

则左偏树满足右左

合并只要往右树上合并就行了

删除:合并两个子树

 

int merge(int x,int y){
    if(!x||!y)return x+y;
    if(v[x]<v[y]||(v[x]==x[y]&&x<y))swap(x,y);
    ch[x][1]=merge(ch[x][1],y);
    f[ch[x][1]]=x;
    if(dis[ch[x][0]]<dis[ch[x][1]])swap(ch[x][0],ch[x][1]);
    dis[x]=dis[ch[x][1]]+1;
    return x;
}

  

posted @ 2018-08-06 16:22  kraylas  阅读(117)  评论(0编辑  收藏  举报