Official

D - Inc, Dec - Decomposition Editorial by maspy


\(2\) つの解法を解説します。

  1. DP の高速化として得られる \(\Theta(N\log N)\) 時間計算量での解法:https://atcoder.jp/contests/arc123/editorial/2254
  2. 最適解の構造を調べることで得られる \(\Theta(N)\) 時間計算量での解法:この解説

この解説において、問題の数列 \(C\) のすべての項を \(-1\) 倍した数列を改めて \(C\) と書くこととします。つまり、広義単調増加数列 \(B, C\) であって \(A_i = B_i - C_i\) を満たすものに関する問題と見なしておきます。


◆ 最適解の構造

次を示すことができます:

【補題】最適解 \((B, C)\) であって、任意の \(1\leqq i \leqq N - 1\) に対して \(B_i =B_{i+1}\) または \(C_i = C_{i+1}\) を満たすものが存在する。

このことを証明しましょう。最適解 \((B, C)\) のうちで、\(B_N - B_1\) が最小であるものをとります。\(1\leqq n \leqq N-1\)\(B_n < B_{n+1}\) かつ \(C_n < C_{n+1}\) を満たすと仮定して、矛盾を導きます。

次の \(2\) 種の操作を考えます。

  • 操作 \(\operatorname{prefix}_+\)\(B_1, \ldots, B_n\) および \(C_1, \ldots, C_{n}\)\(1\) を加える。
  • 操作 \(\operatorname{suffix}_-\)\(B_{n+1}, \ldots, B_N\) および \(C_{n+1}, \ldots, C_N\)\(-1\) を加える。

これらの操作は、\(B\), \(C\) の広義単調増加性および \(A_i = B_i - C_i\) という条件を保ったまま \(B_N - B_1\)\(1\) 減少させます。したがって、これらのどちらかの操作が最適性(\(\sum (|B_i| + |C_i|)\) の最小性)を保つことがいえればよいです。

次が確かめられます:

  • \(B_n < 0\) のとき:\(\operatorname{prefix}_+\) が最適性を保つ。
  • \(0< B_{n+1}\) のとき:\(\operatorname{suffix}_-\) が最適性を保つ。

実際 \(B_n < 0\) のとき、\(1\leqq i\leqq n\) に対して \(B_i < 0\) です。そのような \(i\) に対して操作 \(\operatorname{prefix}_+\) によって \(|B_i|\)\(1\) 減少し、\(|C_i|\) は高々 \(1\) 増加であるのでよいです。\(0 < B_{n+1}\) のときも同様です。

\(B_n < B_{n+1}\) と仮定していたので、これらで場合分けは尽くされています。よって補題を証明することができました。


◆ 答えの計算

補題により、問題の考察を \(B_i =B_{i+1}\) または \(C_i = C_{i+1}\) が成り立つような \((B, C)\) に限定することができます。この場合、

  • \(B_{i+1} = B_i + \max(0, A_{i+1} - A_i)\)
  • \(C_{i+1} = C_i + \max(0, A_i - A_{i+1})\)

が成り立ちます。これと \(A_1 = B_1 - C_1\) より、全ての \(B_i, C_i\)\(B_1\) を定めると一意に定まります。\(x = B_1\) とおくことで、結局次の形の問題に帰着されます:

\(2N\) 個の整数 \(p_1, \ldots, p_{2N}\) が与えられる。整数 \(x\) に対して \(\sum_{i=1}^{2N}|x - p_i|\) の最小値を求めよ。

この問題は、中央値の計算を利用して \(\Theta(N)\) 時間で解くことができます。


◆ 解答例

posted:
last update: