ARC225 D - Gap Swap (easy)

遠隔交換(易)

考え方

各状態に対して、$S$ の値を以下のように定義する。

さて、コストを $c$ 払うと、距離 $c$ 離れた位置にある $2$ つの数を入れ替えることができる。
左へ動いた分は $S$ の値を減少させることがなく、右へ動いた分は最大で $c$ まで減少させられる。
よって、コストを $c$ 払ったときの $S$ の値の減少量は、大きくても $c$ である。

また、各数について、以下の文字を対応させて長さ $N$ の文字列を作る。

この文字列で、'N' 以外で最初に出現する文字は必ず 'R' である。
また、'N' 以外で最後に出現する文字は必ず 'L' である。
したがって、'N' を無視した場合に 'R' の次に 'L' があるところが少なくとも $1$ ヶ所ある。
この 'R''L' の組にあたる部分に操作を行うと、払ったコストを $c$ とすると $S$ は必ず $c$ 減少する。

以上により、初期状態での $S$ の値を $S_0$ とすると、以下の $2$ つがわかった。

したがって、$S_0$ そのものが答えである。

入力例1での動作

入力を受け取り、a の各要素から $1$ を引いて 0-indexed に直す。

n: 6
a: 5 1 2 4 3 0

result を $0$ で初期化する。
i について、max(0,a[i]-i)result に加える。

i a[i] max(0,a[i]-i) 加算後の result
0 5 5 5
1 1 0 5
2 2 0 5
3 4 1 6
4 3 0 6
5 0 0 6

以上より、答えは $6$ である。

注意点

答えは、int 型からはみ出る。
long long 型を用いること。

別解

特になし。