jzoj6355 【NOIP2019模拟】普(pe) (闵可夫斯基和)

在这里插入图片描述
在这里插入图片描述

分析

猜想一下这个函数是分奇偶凸的。
事实上也的确是这样。

考虑分治之后合并的过程。已经处理出了左右两边选多少个的最大值和最小值。
然后按照奇偶分类地合并即可得到新的值。

可以归纳地证明他是凸的。考虑更新的最优解如何求得即可。每次必定是左边多选两个或者右边多选两个,取最优的即可。
令f,g是这两个凸函数的差分,则f,g是递减函数。H是要更新的凸函数。
一个直观的理解是,若 f [ 1.. a ] + g [ 1.. b ] 是 H [ a + b ] f[1..a]+g[1..b]是H[a+b] f[1..a]+g[1..b]H[a+b]的一组最优的更新,那么 f [ 1.. a + x ] + g [ 1.. b − x ] f[1..a+x]+g[1..b-x] f[1..a+x]+g[1..bx]将会小于等于h[a+b]。若x!=0,作差可发现,再在这种情况上多取一个f是不如x=0的情况优的,因为f是递减的。

这个东西可以推广到求闵可夫斯基和的凸包上,具体证明大致是差不多的。
也即,求两个凸壳的闵可夫斯基和的凸壳,只需要用两个指针扫,每次取斜率更合适的那一边即可。

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10, inf = 2e9 + 100;
int a[N], n;

vector<int> mx[N]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值