import java.util.*;
public class Main {
public static void main
(String[] args
) { Scanner sc
= new Scanner
(System.
in); int n = sc.nextInt();
int[] arr = new int[n + 1];
for (int i = 1; i <= n; i++) {
arr[i] = sc.nextInt();
}
int ans = maxTwoSubarrays(arr);
System.
out.
println("Maximum sum of two non-overlapping subarrays: " + ans
); }
public static int maxTwoSubarrays(int[] arr) {
int n = arr.length - 1;
if (n == 0) return 0;
int[] leftBest = buildPrefix(arr);
int[] rightBest = buildSuffix(arr);
int[] maxLeft = new int[n + 2];
maxLeft[1] = leftBest[1];
for (int i = 2; i <= n; i++) {
maxLeft
[i
] = Math.
max(maxLeft
[i
- 1], leftBest
[i
]); }
int[] maxRight = new int[n + 2];
maxRight[n] = rightBest[n];
for (int i = n - 1; i >= 1; i--) {
maxRight
[i
] = Math.
max(maxRight
[i
+ 1], rightBest
[i
]); }
int best = 0;
for (int i = 1; i < n; i++) {
best
= Math.
max(best, maxLeft
[i
] + maxRight
[i
+ 1]); }
return best;
}
private static int[] buildPrefix(int[] arr) {
int n = arr.length - 1;
int[] pref = new int[n + 1];
int run = arr[1];
pref[1] = run;
for (int i = 2; i <= n; i++) {
run
= Math.
max(arr
[i
], run
+ arr
[i
]); pref[i] = run;
}
return pref;
}
private static int[] buildSuffix(int[] arr) {
int n = arr.length - 1;
int[] suff = new int[n + 1];
int run = arr[n];
suff[n] = run;
for (int i = n - 1; i >= 1; i--) {
run
= Math.
max(arr
[i
], run
+ arr
[i
]); suff[i] = run;
}
return suff;
}
}
aW1wb3J0IGphdmEudXRpbC4qOwoKcHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIFNjYW5uZXIgc2MgPSBuZXcgU2Nhbm5lcihTeXN0ZW0uaW4pOwogICAgICAgIGludCBuID0gc2MubmV4dEludCgpOwogICAgICAgIGludFtdIGFyciA9IG5ldyBpbnRbbiArIDFdOyAKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgYXJyW2ldID0gc2MubmV4dEludCgpOwogICAgICAgIH0KICAgICAgICBpbnQgYW5zID0gbWF4VHdvU3ViYXJyYXlzKGFycik7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNYXhpbXVtIHN1bSBvZiB0d28gbm9uLW92ZXJsYXBwaW5nIHN1YmFycmF5czogIiArIGFucyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBpbnQgbWF4VHdvU3ViYXJyYXlzKGludFtdIGFycikgewogICAgICAgIGludCBuID0gYXJyLmxlbmd0aCAtIDE7CiAgICAgICAgaWYgKG4gPT0gMCkgcmV0dXJuIDA7CgogICAgICAgIGludFtdIGxlZnRCZXN0ID0gYnVpbGRQcmVmaXgoYXJyKTsKICAgICAgICBpbnRbXSByaWdodEJlc3QgPSBidWlsZFN1ZmZpeChhcnIpOwoKICAgICAgICBpbnRbXSBtYXhMZWZ0ID0gbmV3IGludFtuICsgMl07CiAgICAgICAgbWF4TGVmdFsxXSA9IGxlZnRCZXN0WzFdOwogICAgICAgIGZvciAoaW50IGkgPSAyOyBpIDw9IG47IGkrKykgewogICAgICAgICAgICBtYXhMZWZ0W2ldID0gTWF0aC5tYXgobWF4TGVmdFtpIC0gMV0sIGxlZnRCZXN0W2ldKTsKICAgICAgICB9CgogICAgICAgIGludFtdIG1heFJpZ2h0ID0gbmV3IGludFtuICsgMl07CiAgICAgICAgbWF4UmlnaHRbbl0gPSByaWdodEJlc3Rbbl07CiAgICAgICAgZm9yIChpbnQgaSA9IG4gLSAxOyBpID49IDE7IGktLSkgewogICAgICAgICAgICBtYXhSaWdodFtpXSA9IE1hdGgubWF4KG1heFJpZ2h0W2kgKyAxXSwgcmlnaHRCZXN0W2ldKTsKICAgICAgICB9CgogICAgICAgIGludCBiZXN0ID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IG47IGkrKykgewogICAgICAgICAgICBiZXN0ID0gTWF0aC5tYXgoYmVzdCwgbWF4TGVmdFtpXSArIG1heFJpZ2h0W2kgKyAxXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYmVzdDsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBpbnRbXSBidWlsZFByZWZpeChpbnRbXSBhcnIpIHsKICAgICAgICBpbnQgbiA9IGFyci5sZW5ndGggLSAxOwogICAgICAgIGludFtdIHByZWYgPSBuZXcgaW50W24gKyAxXTsKICAgICAgICBpbnQgcnVuID0gYXJyWzFdOwogICAgICAgIHByZWZbMV0gPSBydW47CiAgICAgICAgZm9yIChpbnQgaSA9IDI7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgICAgIHJ1biA9IE1hdGgubWF4KGFycltpXSwgcnVuICsgYXJyW2ldKTsKICAgICAgICAgICAgcnVuID0gTWF0aC5tYXgocnVuLCAwKTsKICAgICAgICAgICAgcHJlZltpXSA9IHJ1bjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHByZWY7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgaW50W10gYnVpbGRTdWZmaXgoaW50W10gYXJyKSB7CiAgICAgICAgaW50IG4gPSBhcnIubGVuZ3RoIC0gMTsKICAgICAgICBpbnRbXSBzdWZmID0gbmV3IGludFtuICsgMV07CiAgICAgICAgaW50IHJ1biA9IGFycltuXTsKICAgICAgICBzdWZmW25dID0gcnVuOwogICAgICAgIGZvciAoaW50IGkgPSBuIC0gMTsgaSA+PSAxOyBpLS0pIHsKICAgICAgICAgICAgcnVuID0gTWF0aC5tYXgoYXJyW2ldLCBydW4gKyBhcnJbaV0pOwogICAgICAgICAgICBydW4gPSBNYXRoLm1heChydW4sIDApOwogICAgICAgICAgICBzdWZmW2ldID0gcnVuOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3VmZjsKICAgIH0KfQo=