闵可夫斯基和学习笔记
闵可夫斯基和
-
给定两个向量空间
和 ,则闵可夫斯基和 。当 和 都是凸包时,他们的闵可夫斯基和也是凸包。 -
考虑当
的轮廓是凸函数 , 的轮廓是凸函数 时, 的轮廓就是 。这也说明了为什么这里的 加法卷积能保持函数的凸性。 -
当
和 都是凸函数时,他们的 加法卷积 有如下的快速计算方式: -
考虑对
和 做差分,有 和 。那么 本质上就是取 的一个前缀的 的一个前缀,使得取得的元素个数为 且元素和最小。因为 和 递增,因此本质上就是对 和 两个数组进行归并排序, 就是前 个元素的和。也就是说,卷积后函数的斜率,等于卷积前两个函数的斜率做归并排序,这让我们可以快速对凸函数完成卷积转移。
例题
-
这道题和使用 Slope trick 的烟火表演很像但不一样,因为
和 之间的距离 ,所以 DP 函数右侧的拐点个数不等于儿子个数,无法直接维护最小值区间。 -
先列出 DP 方程,设
表示以 为根的子树满足红黑树性质,且从 到任意后代叶子结点路径上都有 个黑色点需要的最少修改次数, 是让节点 变红/黑的代价。于是有了一个 naive 的方程:
-
可以证明
关于 是凸的,因为 是凸的(仅有两个点),两个凸序列的 加法卷积的结果还是凸的。 -
我们像烟火表演中那样维护差分数组。由于
中的 的取值范围是子树深度的 ,因此 部分可以直接把子树合并起来,复杂度是 的(可以用长链剖分证明)。而 的差分是 ,因此我们还需要支持往差分数组里插入 或者 ,并维持数组的单调性,这一步就对应了我们快速维护闵可夫斯基和转移。 -
可以使用两个 vector,一个 vector 存所有负数,一个存所有整数,再开一个变量表示有几个
。这时插入 就是在正数 vector 的开头插入,插入 就是往负数 vector 的末尾插入。 的答案就是 加上差分数组的最小前缀和,也就是负数 vector 的元素之和。这样做复杂度是 的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!