結果

問題 No.3129 Multiple of Twin Subarray
ユーザー K2
提出日時 2025-04-25 22:44:54
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 147 ms / 2,000 ms
コード長 869 bytes
コンパイル時間 278 ms
コンパイル使用メモリ 82,040 KB
実行使用メモリ 119,064 KB
最終ジャッジ日時 2025-04-25 22:45:12
合計ジャッジ時間 6,394 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 46
権限があれば一括ダウンロードができます

ソースコード

diff #

N = int(input())
A = list(map(int, input().split()))
INF = int(3e9)
dpmal = [-INF] * (N+1)
dpmar = [-INF] * (N+1)
dpmil = [INF] * (N+1)
dpmir = [INF] * (N+1)

for i in range(1, N+1):
    dpmal[i] = max(dpmal[i-1]+A[i-1], A[i-1])
    dpmil[i] = min(dpmil[i-1]+A[i-1], A[i-1])
for i in range(N-1, -1, -1):
    dpmar[i] = max(dpmar[i+1]+A[i], A[i])
    dpmir[i] = min(dpmir[i+1]+A[i], A[i])

maxl = [-INF] * (N+1)
maxr = [-INF] * (N+1)
minl = [INF] * (N+1)
minr = [INF] * (N+1)
for i in range(1, N+1):
    maxl[i] = max(maxl[i-1], dpmal[i])
    minl[i] = min(minl[i-1], dpmil[i])
for i in range(N-1, -1, -1):
    maxr[i] = max(maxr[i+1], dpmar[i])
    minr[i] = min(minr[i+1], dpmir[i])

ans = -INF
for i in range(1, N):
    ans = max(
        ans,
        maxl[i] * maxr[i],
        minl[i] * minr[i],
        maxl[i] * minr[i],
        minl[i] * maxr[i]
    )
print(ans)
0