左偏树一种特殊的堆

可以快速合并两个堆

定义为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;
}

  

相关文章:

  • 2021-11-29
  • 2022-01-25
  • 2022-12-23
  • 2022-01-23
  • 2021-06-24
  • 2021-09-08
猜你喜欢
  • 2021-10-23
  • 2022-01-14
  • 2021-12-31
  • 2021-07-29
  • 2022-02-07
  • 2022-01-13
相关资源
相似解决方案