公式
B - 連続アルバイトの収益 / Profit from Consecutive Part-Time Jobs 解説
by
B - 連続アルバイトの収益 / Profit from Consecutive Part-Time Jobs 解説
by
sounansya
印刷ページ
\(\displaystyle B_i=\sum_{j\le i}(A_j-1)\) \((0\le i\le N)\) とすると、求める値は \(\displaystyle\max_{0\le j < i \le N} (B_i-B_j)\) です。
この値は \(i\) の昇順に \(B_j\) の最小値を保持しておくことで計算することができます。
n = int(input())
a = [x - 1 for x in map(int, input().split())]
b = [0] * (n + 1)
for i in range(n):
b[i + 1] = b[i] + a[i]
INF = 10**18
ans = -INF
min_val = INF
for i in range(n + 1):
ans = max(ans, b[i] - min_val)
min_val = min(min_val, b[i])
print(ans)
投稿日時:
最終更新:
