結果

問題 No.3646 Decrement.
コンテスト
ユーザー kidodesu
提出日時 2026-09-18 17:06:27
言語 PyPy3
(7.3.23 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
WA  
実行時間 -
コード長 963 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 74 ms
コンパイル使用メモリ 81,280 KB
実行使用メモリ 122,840 KB
最終ジャッジ日時 2026-09-18 17:06:35
合計ジャッジ時間 6,758 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge3_0
このコードへのチャレンジ
(要ログイン)
サブタスク 配点 結果
サンプル 0 % AC * 1
小課題1 5 % AC * 5
小課題2 5 % AC * 3
小課題3 20 % AC * 10
小課題4 30 % AC * 19
小課題5 10 % AC * 31 WA * 3
小課題6 30 % AC * 40 WA * 5
合計 60 点
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

n, k = list(map(int, input().split()))
A = list(map(int, input().split()))
if sum(A) <= k:
    print(0)
    exit()
ans = A[0]+A[-1]
for i in range(n-1):
    ans += abs(A[i]-A[i+1])
n += 2
A = [-1] + A + [-1]
L = [i for i in range(n)]
R = [i+1 for i in range(n)]
from heapq import *
hq = []
i = 0
while i < n-1:
    j = i
    while j < n and A[i] == A[j]:
        j += 1
    if A[i-1] < A[i] and A[i] > A[j]:
        heappush(hq, (j-i, i, j))
    L[i] = L[j-1] = i
    R[i] = R[j-1] = j
    i = j

while hq and k:
    t, l, r = heappop(hq)
    if k < t: break
    if L[l] != l or R[l] != r:
        continue
    a = A[l]
    a0, a1 = A[l-1], A[r]
    na = max(a-k//t, a0, a1)
    ans -= 2*(a-na)
    k -= (a-na)*t
    nl, nr = l, r
    if a0 == na:
        nl = L[l-1]
    if a1 == na:
        nr = R[r]
    #print(ans, t, l, r, nl, nr, a, na)
    L[nl] = L[nr-1] = nl
    R[nl] = R[nr-1] = nr
    A[nl] = A[nr-1] = na
    heappush(hq, (nr-nl, nl, nr))

print(ans)
0