Official

C - 道路の凹みの補修 / Repairing Road Potholes Editorial by sounansya Editorial for printing


\(H_{i-1}>H_i<H_{i+1}\) を満たす \(i\) に対して、その箇所が凹んでいない状態にするためには \(\min(H_{i-1},H_{i+1})-H_i\) 回の操作が必要です。

逆に、凹んでいる場所それぞれに対して \(\min(H_{i-1},H_{i+1})-H_i\) 回の操作を行った場合、凹んでいる場所が新たに発生することはなく、凹んでいる場所は \(0\) になります。

したがって、求める値は \(H_{i-1}>H_i<H_{i+1}\) を満たす \(i\) 全てに対する \(\min(H_{i-1},H_{i+1})-H_i\) の総和です。

実装例(Python3)

import sys

input = sys.stdin.readline
n = int(input())
h = list(map(int, input().split()))
ans = 0
for i in range(1, n - 1):
    if h[i - 1] > h[i] < h[i + 1]:
        val = min(h[i - 1], h[i + 1])
        ans += val - h[i]
        h[i] = val
print(ans)

posted:
last update: