博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
左偏树
阅读量:7098 次
发布时间:2019-06-28

本文共 1122 字,大约阅读时间需要 3 分钟。

可并堆有一种黑科技是用线段树合并实现,还能可持久化,时间复杂度nlogn。

这里介绍左偏树。

d值表示走右边到叶子的距离。满足d[r] <= d[l]

写法上用rt维护根节点,类似线段树。

不要把两个merge写混淆了!

放一个模板。

namespace lt {    int ls[N], rs[N], siz[N], d[N], rt[N];    LL val[N], sum[N];    int merge(int x, int y) {        if(!x || !y) return x | y;        if(val[x] < val[y]) std::swap(x, y);        rs[x] = merge(rs[x], y);        if(d[rs[x]] > d[ls[x]]) std::swap(ls[x], rs[x]);        d[x] = d[rs[x]] + 1;        sum[x] = sum[ls[x]] + sum[rs[x]] + val[x];        siz[x] = siz[ls[x]] + siz[rs[x]] + 1;        return x;    }    inline void exmerge(int x, int y) { // y -> x        rt[x] = merge(rt[x], rt[y]);        return;    }    inline void pop(int x) {        rt[x] = merge(ls[rt[x]], rs[rt[x]]);        return;    }    inline int getSum(int x) {        return sum[rt[x]];    }    inline int getSiz(int x) {        return siz[rt[x]];    }    inline void init(int i, LL v) {        val[i] = v;        sum[i] = v;        siz[i] = 1;        d[i] = 1;        rt[i] = i;        return;    }}
左偏树模板

模板。

额外用一个并查集维护每个人在左偏树中的编号。

洛谷P4331 数字序列 主要是想到那个毒瘤合并的结论...

转载于:https://www.cnblogs.com/huyufeifei/p/10416658.html

你可能感兴趣的文章
PHP 进阶之路 - 亿级 pv 网站架构实战之性能压榨
查看>>
js面向对象基础
查看>>
关于前端 - 收藏集 - 掘金
查看>>
javaScript设计模式系列(一) 接口
查看>>
Vue的数据绑定部分的简要过程解释
查看>>
kubectl 搭建
查看>>
网络请求 - 收藏集 - 掘金
查看>>
好用的项目初始化工具SCION升级啦!
查看>>
Android敲门砖 - 收藏集 - 掘金
查看>>
[译] npm, yarn以及pnpm的不同之处
查看>>
通过Atlas实现MySQL读写分离
查看>>
JMessage Android 端开发详解
查看>>
你想不到的最简单php操作MySQL
查看>>
用 vue2 和 webpack 快速建构 NW.js 项目(2)
查看>>
LeetCode 31_Next Permutation
查看>>
2018 re:Invent回顾篇:前线开发者眼中AWS的创新版图
查看>>
GitHub Checks API帮助应用实现进一步的持续集成
查看>>
滴滴进入寒冬期,将裁员2000人
查看>>
埃隆·马斯克:比特币拥有着“极为出色”的结构,而纸质货币终将消失
查看>>
一行代码迁移TensorFlow 1.x到TensorFlow 2.0
查看>>