概述
对于两个点集 来说,把其中的每一个点都看做是对应向量,则这两个集合的闵可夫斯基和定义为 。
凸包的闵可夫斯基和
考虑 为凸包 的闵可夫斯基和,那么 的大小应该为 ,但是如果考虑 的凸包,那么点数应该是 的。
如图:

至于为什么是这样,我们以上凸壳为例,考虑两个上凸壳的闵可夫斯基和其实是两个上凸壳的归并排序,
如图:

易发现最终凸包上的边都是原来的边,这一点就足以充分说明上面的结论。
所以两个凸包的闵可夫斯基和可以做到 。利用类似归并排序即可。具体实现中,我们考虑用一个数组表示一个凸壳, 表示横坐标为 时凸壳上对应点的纵坐标。
注意到一个凸壳相当于是若干一次函数的复合,则两个上凸壳的合并相当于它们做 卷积,即加起来的结果取 。这是因为我们考虑 卷积的形式:
如果把 看做横坐标,把 看做两个凸壳的纵坐标,那么这和 的定义不谋而合,在 中选的那些最优的点一定构成一个凸壳,而这个凸壳就是我们合并得到的凸壳。
同样的,取 就是做 卷积。
闵可夫斯基和与 wqs 二分
wqs 二分可以在 的时间复杂度内求出某一个点值的最优值,但是如果我们的询问变成所有的横坐标,该怎么做?
考虑 wqs 二分的一个经典问题:给定长度为 的序列 ,要求对于每个 ,恰好选出 个不相交的子区间,最大化所有不相交子区间内权值和的和。
显然这个问题可以构建一个费用流模型,如图:

所以这是一个凸函数,可以用 wqs 二分来解决单个值的问题。考虑加强版的问题。
首先考虑一个 DP,设 表示 中选 个区间,左端点有没有被覆盖,右端点有没有被覆盖。加上后两维的原因是可以合并相邻的两个区间。
考虑这个函数显然关于 是一个凸函数,所以我们任意去一个分界点,总可以在 的时间内求出。考虑闵可夫斯基和类似于归并,我们可以取分界点为区间中点,类似分治,求出答案。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律