四边形不等式相关

四边形不等式

我们称一个二元函数 \(w(i, j)\) 满足四边形不等式,当且仅当对于任意 \(a \le b \le c \le d\) 满足:

\[w(a, c) + w(b, d) \le w(a, d) + w(b, c) \]

即交叉小于包含。

其可以用来对转移进行优化,具体的,设:

\[f(i) = \min_{j \le i} w(j, i) \]

定义 \(\operatorname{opt}(i)\) 表示计算 \(f(i)\) 时最优的那个决策点 \(j\),称其满足决策单调性当且仅当对于任意 \(i < j\) 满足 \(\operatorname{opt}(i) \le \operatorname{opt}(j)\)

性质 \(1\)

\(w(i, j)\) 满足四边形不等式,则 \(f(i)\) 满足决策单调性。

考虑反证法,若存在 \(i < j\)\(x = \operatorname{opt}(i) > y = \operatorname{opt}(j)\),那么根据定义有 \(w(x, j) \ge w(y, j), w(y, i) \ge w(x, i)\),于是 \(w(x, j) + w(y, i) \ge w(y, j) + w(x, i)\),违反了四边形不等式,于是得证。

性质 \(2\)

如果对于任意 \(i, j\) 满足 \(w(i, j) + w(i + 1, j + 1) \le w(i, j + 1) + w(i + 1, j)\),那么 \(w\) 满足四边形不等式。

证明比较显然,考虑 \(w(i + 1, j) + w(i, j + 1) - w(i, j) - w(i + 1, j + 1) \ge 0\),这表示 \(w\) 的二维差分矩阵非负;于是考察其二维差分矩阵上一个子矩阵 \((b + 1, d + 1), (a, c)\) 的和必然也非负,即 \(w(a, d) - w(a, c) - w(b, d) + w(b, c) \ge 0\),这是四边形不等式的定义。


上面那个决策单调性太特殊了,只对 \(f(i) = \min w(j, i)\) 生效,感觉没有什么实际用途,一般都是这种问题:将序列分段使得权值最小,即:

\[f(i) = \min_{j \le i} f(j - 1) + w(j, i) \]

这种怎么办?考虑:

性质 \(3\)

\(w(i, j)\) 满足四边形不等式,则 \(w(i, j) = x_i + y_j\) 也满足。

这是显然的,带入进去把 \(x, y\) 都消掉了。

于是只需要 \(w(i, j)\) 满足四边形不等式,则上面 \(f(i)\) 的转移也满足决策单调性。

如果强制钦定了要分 \(k\) 段,可以根据情况使用 wqs 二分或者多加一维解决。


考虑 \(w(l, r)\) 可能是 \(\sum_{l \le i \le j \le r} c(i, j)\) 的形式:

性质 \(4\)

\(c(i, j) \ge 0\),则 \(w(l, r) = \sum_{l \le i \le j \le r} c(i, j)\) 满足四边形不等式。

考虑证明 \(w(x, y) + w(x + 1, y + 1) \le w(x, y + 1) + w(x + 1, y)\),考虑拆贡献 \(x + 1 \le i \le j \le y\)\((i, j)\) 对两边贡献是相同的,然后左边是 \(\sum_{i = x, j \in [x, y]} c_{i, j} + \sum_{i \in [x + 1, y + 1], j = y + 1} c_{i, j}\),然后右边 \(w(x, y + 1)\) 去掉 \(x + 1 \le i \le j \le y\)\((i, j)\) 后是 \(\sum_{i = x,j \in [x, y + 1]} c(i, j) + \sum_{i \in [x, y + 1], j = y + 1} c(i, j)\),于是右边多考虑了 \(c(x, y + 1)\),得证。

例题

P1880 [NOI1995] 石子合并

考虑区间 dp,定义 \(dp(l, r)\) 表示将区间 \([l, r]\) 合并的最小代价,于是有转移:

\[dp(l, r) = (s_r - s_{l - 1}) + \min\limits_{k = l}^{r - 1} (dp(l, k) + dp(k + 1, r)) \]

钦定 \(l\) 固定时,有 \(w(i, j) = dp(l, i) + dp(i + 1, j)\) ,考虑证明 \(w(i, j)\) 满足四边形不等式,你推下式子发现等价于证明 \(dp(i, j)\) 满足四边形不等式。

这里 \(dp(i, j)\) 满足四边形不等式的充要条件是 \(h(i, j) = s_i - s_{j - 1}\) 也满足四边形不等式且满足区间包含单调性,可以对长度数学归纳发得到。

然后你发现上面固定右端点 \(r\) 时也有决策单调性,于是有 \(\operatorname{opt}(l, r) \in [\operatorname{opt}(l, r - 1), \operatorname{opt}(l + 1, r)]\),所以这样枚举决策点时间复杂度就是 \(O(n^2)\) 的。

link

于是可以得到性质 \(5\)

\(w(l, r)\) 满足四边形不等式且满足区间包含单调性,若 \(dp(l, r) = w(l, r) + \min\limits_{k = l}^{r - 1} (dp(l, k) + dp(k + 1, r))\),那么 \(dp(l, r)\) 也满足四边形不等式;且固定 \(l\) 或者固定 \(r\) 时都满足决策单调性,即 \(\operatorname{opt}(l, r) \in [\operatorname{opt}(l, r - 1), \operatorname{opt}(l + 1, r)]\)

类似题目 UVA10304 Optimal Binary Search Tree

CF868F Yet Another Minimization Problem

考虑 \(c(i, j) = [a_i = a_j]\),那么 \(w(l, r) = \sum_{l \le i \le j \le r} c(i, j)\) 满足四边形不等式,于是 \(dp\) 时:

\[dp_{i, j} = \min_{k \le i} dp_{k - 1, j - 1} + w(k, i) \]

这个最优决策 \(k\) 具有单调性;考虑用分治与整体二分的思想解决。

即我们定义 \(solve(l, r, kl, kr)\) 表示目前在转移 \([l, r]\) 内的点,其最优决策点在 \([kl, kr]\) 内;那么可以暴力算出 \(mid\) 的最优决策点 \(kmid\),然后递归到 \(solve(l, mid - 1, kl, kmid), solvew(mid + 1, r, kmid, kr)\);显然递归层数使用 \(\log n\) 层,且每层 \([kl, kr]\) 的总长度是 \(O(n)\) 级别的,于是单次时间复杂度是 \(O(n \log n)\)

现在问题在于如何快速算 \(w(l, r)\),你考虑用类似莫队的走指针方式解决,你发现每次移动的长度是 \(O(len)\) 级别的,于是最终是 \(O(n \log n)\) 次。

总时间复杂度为 \(O(nk \log n)\)

link

P3515 [POI 2011] Lightning Conductor

这题你推一下式子,若对于 \(i\) 的答案是 \(k\),那么要对于所有 \(j\) 满足:

\[k + h_i \ge h_j + \sqrt{|i - j|} \]

\[k \ge h_j + \sqrt{|i - j}| - h_i \]

于是:

\[k = \lceil\max_{j} h_j + \sqrt{|i - j|} \rceil - h_i \]

考虑怎么算 \(h_j + \sqrt{|i - j|}\),这里分讨 \(j < i\)\(j > i\) 两种情况算就可以去掉绝对值,然后 \(w(i, j) = \sqrt{i - j}\),容易发现 \(w\) 满足四边形不等式,于是有决策单调性。

于是分治解决即可,时间复杂度为 \(O(n \log n)\)

link

P4767 [IOI 2000] 邮局 加强版

显然对于每个设立的邮局,到其距离最近的村庄集合是集合,于是可以设立状态 \(dp_{i, j}\) 表示考虑前 \(i\) 个村庄放了 \(j\) 个邮局的最小代价:

\[dp_{i, j} = \min\limits_{k < i} dp_{k, j - 1} + w(k + 1, i) \]

其中 \(w(l, r)\) 表示在区间 \([l, r]\) 内放一个邮局的最小代价,显然将邮局放在中位数位置最优,于是可以增量递推:

\[w(l, r) = w(l, r - 1) + a_r - a_{\frac{l + r}{2}} \]

你发现 \(w\) 满足四边形不等式,于是我们按照 \(j\) 分层每层分治计算即可,时间复杂度为 \(O(nk \log n)\).

link

这里证明一下上面的 \(w\) 满足四边形不等式,即 \(w(i, j) + w(i + 1, j + 1) \le w(i, j + 1) + w(i + 1, j)\);首先注意到 \([i, j + 1]\)\([i + 1, j]\) 的中位数一样,设为 \(k\)

那么 \(w(i, j + 1) = w(i + 1, j) + a_k - a_i + a_{j + 1} - a_k = w(i + 1, j) + a_{j + 1} - a_i\),于是 \(w(i, j + 1) + w(i + 1, j) = 2w(i + 1, j) + a_{j + 1} - a_i\)

然后根据 \(w\) 的最小性的定义,可以得到 \(w(i, j) \le w(i + 1, j) + a_k - a_i, w(i + 1, j + 1) \le w(i + 1, j) + a_{j + 1} - a_k\),于是 \(w(i, j) + w(i + 1, j + 1) \le 2w(i + 1, j) + a_{j + 1} - a_i = w(i, j + 1) + w(i + 1, j)\) 得证。

P10861 [HBCPC2024] MACARON Likes Happy Endings

洛谷同步题解。

\(s\) 为前缀异或,那么 \(c(i, j) = [s_j \oplus s_{i - 1} = d] \ge 0\),于是 \(w(l, r) = \sum_{l \le i \le j \le r}\) 满足四边形不等式,于是 \(dp\) 时:

\[dp_{i, j} = \min_{k \le i} dp_{k - 1, j - 1} + w(k, i) \]

然后分治去做,计算 \(w(k, i)\) 可以简单走指针计算,于是时间复杂度是 \(O(nk \log n)\) 的。

link

P10769 「CROI · R2」公交接驳

洛谷同步题解。

题意比较复杂。

我们称一个班车管辖一个换乘站当且仅当这个班车是最先到达这个换乘站(或者同时到达且价值更小),称其实际管辖当且仅当到达的时间大于等于列车到换乘站的时间。

然后容易发现对于两个班车,如果一个班车在某一个换乘站上比另外一个更早到达,那么之后一定是这个班车领先;所以每个班车管辖的区域一定是以其始发站开头的前缀(或者压根没有,这没必要考虑)。

然后考虑最重要的性质保证两个换乘站之间乘坐公交车花费的时间一定不小于乘坐市郊铁路花费的时间;这说明每个班车实际管辖的范围一定是一个区间,即可能我一个前缀中的站我先到了但是列车还没到。

考虑一个被实际管辖的极长区间 \([l, r]\),为了使得总等待时间最小,显然希望在 \(t_l\) 时刻时班车恰好到了 \(l\);此时总等待时间固定,于是期许的是班车的 \(v\) 尽可能小,容易想到找到前缀 \([1, l]\)\(v\) 最小的站 \(p\)\(t_l - \operatorname{dis}(p, l)\) 发车。

那么对于这样一个序列 \(1 \sim n\) 的划分,能否保证对于每个班车实际管辖的是我们期望的呢?归纳证明一下,此时 \(<l\) 的位置归纳满足要求,考虑新增了 \([l, r]\) 的班车在 \(p\) 处发车:

  • 考虑 \([l, r]\) 的上一个区间 \([l', l - 1]\),如果 \(l' \ge p\):那么 \([l', l - 1]\) 的班车也是在 \(p\) 处时刻 \(t_{l'} - \operatorname{dis}(p, l')\) 发车的,根据之前的性质 \(t_l - \operatorname{dis}(p, l) \ge t_{l'} - \operatorname{dis}(p, l')\),即 \([l, r]\) 的班车先发车,考虑其到 \(l'\) 的时刻 \(t_l - \operatorname{dis}(p, l) + \operatorname{dis}(p, l') = t_l -\operatorname{dis}(l, l') \le t_{l'}\),那么到 \(l'\) 时列车还没开到(或者恰好一起走了不劣),得证。

  • 否则 \(l' < p\):首先需要证明 \(p\) 处发车时刻小于等于 \([l', l - 1]\) 的车到 \(p\) 的时刻即可,即 \(t_l - \operatorname{dis}(p, l) \le t_{l'} + \operatorname{dis}(l', p)\),即 \(t_l - t_{l'} \le \operatorname{dis}(p, l) + \operatorname{dis}(l', p) = \operatorname{dis}(l', l)\),这是题目给的性质;还要证明 \([l', l - 1]\) 的车到 \(l\)\(\ge t_l\),这也是那个性质,于是得证。

上面还需要讨论价值相同比较到达时间的情况,但是较为简单,就不说了。

于是可以令 \(v\)\(v\) 的前缀 \(\min\),然后定义 \(dp_{i, j}\) 表示考虑前 \(i\) 个站已经发了 \(j\) 班车且最后一班车实际管辖的是以 \(i\) 结尾的最小代价,于是有转移:

\[dp_{i, j} = \min\limits_{k < l} dp_{k, j - 1} + w(k + 1, i) \]

\(S\)\(s\) 的前缀和,那么:

\[w(l, r) = v_l \sum_{i = l}^r (S_{i - 1} - S_{l - 1} + t_l - t_i) \]

于是预处理 \(w(l, r)\) 后即可做到 \(O(pn^2k)\),注意到 \(k \ge n\) 时答案是 \(0\),于是可以做到 \(O(pn^3)\)

打表 \(w(l, r)\) 并不困难,你容易暴力验证其满足四边形不等式,于是满足决策单调性,直接套分治就可以做到 \(O(pn^2 \log n)\)

证明一下:

考虑证明 \(w(i, j) + w(i + 1, j + 1) \le w(i, j + 1) + w(i + 1, j)\),抵消一下等价于 \(v_{i + 1} (S_j - S_i + t_{i + 1} - t_{j + 1})\le v_i (S_j - S_{i - 1} + t_i - t_{j + 1}) = v_i(S_j - S_i + t_i - t_{j + 1} + s_i)\),先消掉一些于是 \(v_{i + 1}t_{i + 1} \le v_i(t_i + s_i)\),而 \(t_{i + 1} \le t_i + s_i\) 是显然满足的,于是得证。

link

P5574 [CmdOI2019] 任务分配问题

这里 \(c(i, j) = [a_i < a_j] \ge 0\),于是 \(w(l, r) = \sum_{l \le i \le j \le r} c(i, j)\) 满足四边形不等式,于是满足决策单调性,直接分治做,走指针过程中树状数组维护即可,时间复杂度是 \(O(nk \log^2 n)\)

link

P1912 [NOI2009] 诗人小G

定义 \(dp_i\) 表示划分了 \(1 \sim i\) 的最小代价,令 \(w(l, r) = (\sum_{i = l}^r a_i +r - l - L)^P\),然后有转移:

\[dp_i = \min_{j < i} dp_j + w(j + 1, i) \]

显然 \(w\) 满足四边形不等式,于是满足决策单调性。

上面那些题因为你 \(dp\) 转移的顺序是任意的,所以可以分治去算;而本题代价是和之前的 \(dp\) 值相关的,即转移顺序是在线依次转移的怎么办?

假设当前要转移 \(i\),考虑已经用单调栈动态维护 \(1 \sim i - 1\) 的所有可能的决策点 \(j\) 其转移的区间 \([kl_j, kr_j]\)

  • 考虑队头的决策点的贡献区间右端点,如果小于 \(i\),那么其不会造成贡献了,直接踢掉;否则它就是 \(i\) 的最优决策点,然后将其的贡献区间左端点改为 \(i\)

  • 然后现在要做的是插入 \(i\) 这个决策点,根据决策单调性,我们从队尾开始考虑,如果队尾是 \(x\),且 \(w(i, kl_x)\)\(w(x, kl_x)\) 更优,那么 \(x\) 的整个区间 \([kl_x, kr_x]\) 都是 \(i\) 更优,于是可以直接弹掉,一直到弹不掉为止。

  • 假设此时队尾是 \(t\),已知 \(t\)\(kl_t\) 处比 \(i\) 更优,若在 \(kr_t\)\(t\) 也比 \(i\) 更优,那么 \(i\) 的贡献区间应该就是 \([kr_t + 1, n]\);否则可以自 \([kl_t, kr_t]\) 处找一个断点 \(mid\) 使得 \([kl_t, mid - 1]\)\(t\) 更优,\([mid, kr_t]\)\(i\) 更优,可以根据单调性二分去算,那么 \(i\) 此时的贡献区间是 \([mid + 1, n]\)

  • 最后把 \(i\) 插入进去;初始插入 \(0\)\(kl_0 = 1, kr_0 = n\)

模拟上述过程即可,过程中比较两个 \(w\) 的大小,因为值特别大,于是可以用 long double 存,时间复杂度为 \(O(n \log n)\)

link

P9732 [CEOI 2023] Trade

洛谷同步题解。

容易发现,这里 \(w(l, r)\) 的值是 \(A\) 区间前 \(k\) 大减去 \(B\) 区间的和;然后问的是所有 \(w(l, r)\) 的最大值,以及判断每个位置是否可能是某个最大的 \(w(l, r)\) 的前 \(k\) 大。

对于一个固定的右端点 \(r\),设以 \(r\) 为右端点的最大权值是 \(f_r\)

于是问题变为求 \(f_r\);考虑证明 \(w(l, r)\) 满足四边形不等式:

  • \(w(i, j) + w(i + 1, j + 1) \ge w(i, j + 1) + w(i + 1, j)\),本质上相当于证明 \([i, j], [i + 1, j + 1]\) 的前 \(k\) 大的和大于等于 \([i, j + 1], [i + 1, j]\) 的前 \(k\) 大的和;这里令 \(w'(l, r)\) 为区间前 \(k\) 大之和,即 \(w'(i, j) + w'(i + 1, j + 1) \ge w'(i, j + 1) + w'(i + 1, j)\)

  • 看作从 \([i + 1, j]\) 向两边扩展,然后相当于用 \(a_i\)\(a_{j + 1}\) 去替换 \([i + 1, j]\) 中的第 \(k\) 大与第 \(k - 1\) 大,分讨一下几种情况都是满足条件的。

于是满足决策单调性,可以直接分治,算 \(w(l, r)\) 的时候直接主席树即可。

然后考虑第二问怎么做,考虑首先找出所有最优区间,但是这种可能很多怎么办?继续应用四边形不等式发现性质,若 \(a < b \le c < d\)\([a, d]\)\([b, c]\) 是最优区间,根据四边形 \(w(a, c) + w(b, d) \ge w(b, c) + w(a, d) = 2 mx\),于是 \([a, c], [b, d]\) 必然也是最优区间。然后你注意到 \([a, d]\) 的前 \(k\) 大在 \([a, c]\)\([b, d]\) 中一定也是前 \(k\) 大;于是我们不需要处理包含关系。

于是可以走双指针求出右端点递增时左端点不降的所有最优区间,具体的,对于一个右端点 \(r\) 求出最大的左端点 \(opt_r\) 使得 \([opt_r, r]\) 是最优区间;然后考虑 \(r\) 前面一个最优区间的左端点 \(l\),那么只有左端点在 \([l, opr_r]\) 这个区间且右端点是 \(r\) 的最优区间才可能对答案造成贡献。

找到了可以对答案造成贡献的区间,现在即我们需要支持给一个区间中前 \(k\) 大的数打标记,容易主席树找到区间第 \(k\)\(v\);于是只需要支持给区间 \([l, r]\)\(\ge v\) 的位置打标记即可。

于是直接对序列扫描线,对于每个位置 \(i\),找到所有覆盖它的操作 \((l, r, v)\) 中的 \(v\) 的最小值 \(v_{\min}\),如果 \(a_i \ge v_{\min}\),那么 \(i\) 必然被打了标记;使用 multiset 维护所有的 \(v\) 即可。

时间复杂度为 \(O(n \log^2 n)\)

link

posted @ 2026-01-18 14:15  rgw2010  阅读(49)  评论(1)    收藏  举报