Official

A - Erase by Value Editorial by maroonrk_admin


\(A_i > A_{i+1}\) となる \(i\) が存在する場合,そのような \(i\) のうち最も先頭に近いものをとり,それを \(k\) とおくことにします.

\(A_k=A_i\) となる \(i\) のうちで最小のものを \(j\) とおくことにします. このとき,\(A\) の先頭は \(A_1 \leq A_2 \leq \cdots \leq A_{j-1} < A_j = A_{j+1} = \cdots = A_k > A_{k+1}\) となっています. ここで \(x=A_k\) としてみると,\(a\) の先頭は \(A_1, A_2, \cdots, A_{j-1}, A_{k+1}\) となります,これは \(A\) より辞書順で小さいことが確認できます.(先頭 \(j-1\) 要素が同じで,\(j\) 番目の要素が \(a\) の方が小さい)

\(x\) をそれ以外の値にした場合について考えると,上と同様の議論で,\(x=A_k\) とした場合より解がよくならないことがわかります.

よって,\(x=A_k\) とするのが最適です.

\(A_i > A_{i+1}\) となる \(i\) が存在しない場合は,\(A\) が広義単調増加であることより,\(x=A_N\) とするのが最適です.

以上を実装すれば \(O(N)\) 時間になります.

解答例(pypy3)

posted:
last update: