結果
問題 | No.3129 Multiple of Twin Subarray |
ユーザー |
|
提出日時 | 2025-03-06 01:27:37 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 118 ms / 2,000 ms |
コード長 | 697 bytes |
コンパイル時間 | 591 ms |
コンパイル使用メモリ | 82,160 KB |
実行使用メモリ | 104,956 KB |
最終ジャッジ日時 | 2025-03-06 01:27:45 |
合計ジャッジ時間 | 7,655 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 46 |
ソースコード
n = int(input()) a = [int(x) for x in input().split()] assert 2 <= n <= 2 * 10 ** 5 for x in a: assert - 10 ** 4 <= x <= 10 ** 4 from collections import defaultdict inf = 10 ** 18 # 区間[0:l]の連続部分列としてあり得るmax def calc(a): res = [-inf]*n mi = 0 s = 0 for i in range(n): s += a[i] res[i] = s - mi mi = min(mi, s) for i in range(n-1): res[i+1] = max(res[i+1], res[i]) return res def solve(a): l = calc(a) r = calc(a[::-1])[::-1] ans = -inf for i in range(n-1): tmp = l[i] * r[i+1] ans = max(ans, tmp) return ans print(max(solve(a), solve([-i for i in a])))