import sys
input = sys.stdin.readline
n, k = map(int, input().split())
A = list(map(int, input().split()))
def opt(l):
dp = [tuple()]*2 # old tuple, new tuple, storing max value, number arrays
dp[0] = (0, 0)
dp[1] = (A[0] - l, -1)
for i in range(1, n):
tmp0 = max(dp[0], dp[1])
tmp1 = max(
(dp[0][0] - l + A[i], dp[0][1] - 1),
(dp[1][0] + A[i], dp[1][1])
)
dp[0] = tmp0
dp[1] = tmp1
return max(dp)
lo = 0
hi = int(3e14)
while lo < hi:
mid = (lo+hi)//2
res = opt(mid)
ktemp = -res[1]
if ktemp > k:
lo = mid + 1
else:
hi = mid
res = opt(lo)
print(res[0] + k*lo)
컴파일 시 표준 출력 (stdout) 메시지
Compiling 'feast.py'...
=======
adding: __main__.pyc (deflated 34%)
=======
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |