結果
問題 | No.3129 Multiple of Twin Subarray |
ユーザー |
👑 |
提出日時 | 2025-03-01 00:23:31 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 121 ms / 2,000 ms |
コード長 | 759 bytes |
コンパイル時間 | 428 ms |
コンパイル使用メモリ | 82,244 KB |
実行使用メモリ | 119,024 KB |
最終ジャッジ日時 | 2025-03-01 00:26:09 |
合計ジャッジ時間 | 6,370 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 46 |
ソースコード
N = int(input()) A = list(map(int, input().split())) if N == 2: print(A[0] * A[1]) exit() def contiguous_max(arr): ans = [0] * (len(arr) + 1) s, m = 0, 0 for i in range(len(arr)): s += arr[i] m = min(m, s) ans[i + 1] = max(ans[i], s - m) return ans def contiguous_min(arr): ans = [0] * (len(arr) + 1) s, m = 0, 0 for i in range(len(arr)): s += arr[i] m = max(m, s) ans[i + 1] = min(ans[i], s - m) return ans left_max = contiguous_max(A) right_max = contiguous_max(A[::-1])[::-1] left_min = contiguous_min(A) right_min = contiguous_min(A[::-1])[::-1] ans = 0 for i in range(N): ans = max(ans, left_max[i] * right_max[i], left_min[i] * right_min[i]) print(ans)