Loading

4.19 CW 模拟赛 T3. 恋爱入门教学

前言

状态不佳

一定要做实事

思路

首先考虑分析问题

加入 / 删除三元组 \(\{F_i, T_i, B_i\}\), 每次操作后, 求 \(\sum_{i = 1}^{k} |T_i (F_i - f) + B_i|\) 的最小值

首先这样一类自己可以确定一个变量的问题, 不难想到函数转化
具体的

\[ \begin{align*} f(i) =& \left| T_i (F_i - f) + B_i \right| \\ =& \left| -T_i f + (T_iF_i + B_i) \right| \end{align*} \]

因此可以视作

加入 / 删除二元组 \(\{k_i, b_i\}\), 每次操作后, 求 \(\sum_{i = 1}^{k} \left| k_i x + b_i \right|\) 的最小值

不难发现求和柿是一个经典的绝对值一次函数, 如何去求解对应的最大值呢?

方法 \(1\): 函数性质

不妨设 \(f(x) = \sum_{i = 1}^{k} \left| k_i x + b_i \right|\)

这里首先要找两绝对值函数相加之后的性质
这是一个经典结论, 不难发现可以将两绝对值相加转化成对函数斜率的相加
所以你可以离散化出断点的位置, 然后维护线段树支持区间修改, 再用树上二分维护最值即可, 因为斜率具有单调性

方法 \(2\): 绝对值性质

发现最终的函数是单峰的, 于是可以考虑三分
但是计算答案不能 \(\mathcal{O} (n)\), 需要更快的方法

考虑找点性质
最终我们要找到所有 \(x\) 对应的函数取值之和
发现如果是简单的一次函数, 我们可以维护当前点的 \(k_i\) 之和以及 \(b_i\) 之和即可
但是绝对值函数怎么办?

不妨数据结构维护每个位置 \(x\) 对应的 \(k_i\) 变化量, 然后就可以快速统计了

这个是 \(\mathcal{O} (n \log n \log v)\)

总结

一类经典的函数转化类问题

posted @ 2025-04-21 21:04  Yorg  阅读(20)  评论(0)    收藏  举报