結果
問題 | No.3129 Multiple of Twin Subarray |
ユーザー |
![]() |
提出日時 | 2025-04-25 23:03:23 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 347 ms / 2,000 ms |
コード長 | 1,654 bytes |
コンパイル時間 | 3,493 ms |
コンパイル使用メモリ | 79,536 KB |
実行使用メモリ | 75,120 KB |
最終ジャッジ日時 | 2025-04-25 23:03:54 |
合計ジャッジ時間 | 15,247 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 46 |
ソースコード
import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); String[] sa = br.readLine().split(" "); int[] a = new int[n]; for (int i = 0; i < n; i++) { a[i] = Integer.parseInt(sa[i]); } br.close(); long[] maxL = new long[n]; long val = a[0]; maxL[0] = val; for (int i = 1; i < n; i++) { if (val < 0) { val = 0; } val += a[i]; maxL[i] = Math.max(maxL[i - 1], val); } long[] minL = new long[n]; val = a[0]; minL[0] = val; for (int i = 1; i < n; i++) { if (val > 0) { val = 0; } val += a[i]; minL[i] = Math.min(minL[i - 1], val); } long[] maxR = new long[n]; val = a[n - 1]; maxR[n - 1] = val; for (int i = n - 2; i >= 0; i--) { if (val < 0) { val = 0; } val += a[i]; maxR[i] = Math.max(maxR[i + 1], val); } long[] minR = new long[n]; val = a[n - 1]; minR[n - 1] = val; for (int i = n - 2; i >= 0; i--) { if (val > 0) { val = 0; } val += a[i]; minR[i] = Math.min(minR[i + 1], val); } long ans = Long.MIN_VALUE; for (int i = 1; i < n; i++) { long v1 = maxL[i - 1]; long v2 = maxR[i]; long v3 = v1 * v2; ans = Math.max(ans, v3); v1 = minL[i - 1]; v2 = minR[i]; v3 = v1 * v2; ans = Math.max(ans, v3); v1 = maxL[i - 1]; v2 = minR[i]; v3 = v1 * v2; ans = Math.max(ans, v3); v1 = minL[i - 1]; v2 = maxR[i]; v3 = v1 * v2; ans = Math.max(ans, v3); } System.out.println(ans); } }