luogu P8923 『MdOI R5』Many Minimizations

发布时间 2023-07-14 16:37:20作者: 275307894a

题面传送门

这不是保序回归板子吗(

首先你拿保序回归通法做这个题那是一点前途没有,所以你考虑一点更优秀的方法。

众所周知保序回归 \(L_{2k+1}\) 问题可以slope trick。考虑设 \(f_{i,j}\) 表示选择了 \(i\) 个数,现在 \(b\) 的值是 \(j\) 的方案数。每次的一个操作是:加 \(|x-a_i|\),前缀取 \(\min\)。用堆维护拐点,则可以转换成:加入两个 \(a_i\),pop 掉最大的拐点。其中在加入 \(a_i\) 的时候对于全序列答案增量的贡献是 \(Mx-a_i\)

所有 \(a_i\) 的和是好计算的,但是 \(Mx\) 是困难的。你把 \(Mx\) 转化成用总和减去最后剩下的数,这样就可以枚举一条分界线 \(x\),将大于等于 \(x\) 的都设为 \(1\),小于 \(x\) 的设为 \(0\),则对答案的差分贡献就是最后 \(1\) 的个数。设 \(f_{i,j}\) 表示到了第 \(i\) 个数,现在剩下 \(j\)\(1\),关于 \(x\) 的多项式是什么。转移要么有 \(m-x+1\) 的方案让 \(j\) 加一,要么有 \(x-1\) 的方案让 \(j\) 减一。特别的 \(j\) 时刻对 \(0\)\(\max\)。这样是 \(O(n^3)\) 的。

\(0\)\(\max\) 这种事情非常不好,考虑将折线向上平移若干个位置,使其至少和 \(0\) 有一个交点,并且不和 \(0\)\(\max\),容易发现这和原来的构成双射。而恰好有一个交点可以进一步容斥成,始终在 \(\geq 0\) 减去始终 \(\geq 1\) 的。对于 \(\geq x\) 的问题是经典反射容斥,对于每个终点可以 \(O(n)\) 计算。

这样你可以得到每个 \((x-1)^i(m-x+1)^{n-i}\) 的系数,然后拉格朗日插值即可得到 \(1\sim m\) 之和。总时间复杂度 \(O(n^2)\)

submission