题意 : 给定序列 ,构造递增序列 ,使得序列 和 的各项之差的绝对值之和即 最小。
,时限 。
考虑 。
首先将 同时减去 ,这样约束可以转化为 。
设 表示考虑了前 个数,且 ,
的最小值。
有转移
记 ,则
。
于是,问题变为 : 维护序列 ,支持下列两种操作 :
将
分为若干段线段维护。只需维护拐点。
当插入某个绝对值函数
时, 前面的线段斜率均 ,后面的线段斜率 。此时可能需要插入两个 。
最后两条斜率为
的线段可能合并。
我们用拐点 表示 ,拐点重复 次则 。用堆维护拐点即可。
我们维护的折线如下图:

最终的最优解是
的最后一个拐点(蓝色)处。
我们已知 (处在斜率为 的部分),要求出 。
为 轮的最后一个拐点 。
复杂度 。