浅谈左偏树

关于左偏树这个东西嘛……还是挺简单的。

就是一个merge操作:

int merge(int x, int y){
	//pushdown(x); pushdown(y);   // 这里可以下放标记
    if(!x || !y) return x + y;  //特判一下
    if(sum[x] > sum[y]) swap(x, y);//保持堆的性质
    ch[x][1] = merge(ch[x][1], y);//下面的就是左偏树的精髓所在了,只可会意
    if(dis[ch[x][0]] < dis[ch[x][1]]) swap(ch[x][0], ch[x][1]); //就是这个奇奇怪怪的操作可以保证堆为log层
    dis[x] = dis[ch[x][1]] + 1;
    return x;
}

没了? 没了

就这个merge操作可以完成插入、删除还有合并(merge本来就是合并嘛……)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值