/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
class Main
{
{
int n = 6;
int[] nums = {2, 1, -4, 9, 2, -1};
System.
out.
println("Maximum sum of two non-overlapping subarrays: " + maxTwoNonOverlappingSubarraysSum
(nums
)); }
public static int maxTwoNonOverlappingSubarraysSum(int[] arr){
int n = arr.length;
int[] prefixMaxSum = calculatePrefixMaxSum(arr);
int[] suffixMaxSum = calculateSuffixMaxSum(arr);
int max = 0;
for(int i = 0 ; i < n - 1 ; i++){
max
= Math.
max(max , prefixMaxSum
[i
] + suffixMaxSum
[i
+ 1]); }
return max;
}
public static int[] calculatePrefixMaxSum(int[] arr){
int n = arr.length;
int[] ans = new int[n];
int curMax = 0 , max = 0;
for(int i = 0 ; i < n ; i++){
curMax
= Math.
max(arr
[i
] + curMax ,
Math.
max(arr
[i
] ,
0)); max
= Math.
max(max , curMax
); ans[i] = max;
}
return ans;
}
public static int[] calculateSuffixMaxSum(int[] arr){
int n = arr.length;
int[] ans = new int[n];
int curMax = 0 , max = 0;
for(int i = n - 1 ; i >= 0 ; i--){
curMax
= Math.
max(arr
[i
] + curMax ,
Math.
max(arr
[i
] ,
0)); max
= Math.
max(max , curMax
); ans[i] = max;
}
return ans;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBNYWluCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCWludCBuID0gNjsKCQlpbnRbXSBudW1zID0gezIsIDEsIC00LCA5LCAyLCAtMX07CgoJCVN5c3RlbS5vdXQucHJpbnRsbigiTWF4aW11bSBzdW0gb2YgdHdvIG5vbi1vdmVybGFwcGluZyBzdWJhcnJheXM6ICIgKyBtYXhUd29Ob25PdmVybGFwcGluZ1N1YmFycmF5c1N1bShudW1zKSk7Cgl9CgoJcHVibGljIHN0YXRpYyBpbnQgbWF4VHdvTm9uT3ZlcmxhcHBpbmdTdWJhcnJheXNTdW0oaW50W10gYXJyKXsKCQlpbnQgbiA9IGFyci5sZW5ndGg7CgkJaW50W10gcHJlZml4TWF4U3VtID0gY2FsY3VsYXRlUHJlZml4TWF4U3VtKGFycik7CgkJaW50W10gc3VmZml4TWF4U3VtID0gY2FsY3VsYXRlU3VmZml4TWF4U3VtKGFycik7CgkJaW50IG1heCA9IDA7CgkJZm9yKGludCBpID0gMCA7IGkgPCBuIC0gMSA7IGkrKyl7CgkJCW1heCA9IE1hdGgubWF4KG1heCAsIHByZWZpeE1heFN1bVtpXSArIHN1ZmZpeE1heFN1bVtpICsgMV0pOwoJCX0KCQlyZXR1cm4gbWF4OwoJfQoKCXB1YmxpYyBzdGF0aWMgaW50W10gY2FsY3VsYXRlUHJlZml4TWF4U3VtKGludFtdIGFycil7CgkJaW50IG4gPSBhcnIubGVuZ3RoOwoJCWludFtdIGFucyA9IG5ldyBpbnRbbl07CgkJaW50IGN1ck1heCA9IDAgLCBtYXggPSAwOwoJCWZvcihpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyl7CgkJCWN1ck1heCA9IE1hdGgubWF4KGFycltpXSArIGN1ck1heCAsIE1hdGgubWF4KGFycltpXSAsIDApKTsKCQkJbWF4ID0gTWF0aC5tYXgobWF4ICwgY3VyTWF4KTsKCQkJYW5zW2ldID0gbWF4OwoJCX0KCQlyZXR1cm4gYW5zOwoJfQoKCXB1YmxpYyBzdGF0aWMgaW50W10gY2FsY3VsYXRlU3VmZml4TWF4U3VtKGludFtdIGFycil7CgkJaW50IG4gPSBhcnIubGVuZ3RoOwoJCWludFtdIGFucyA9IG5ldyBpbnRbbl07CgkJaW50IGN1ck1heCA9IDAgLCBtYXggPSAwOwoJCWZvcihpbnQgaSA9IG4gLSAxIDsgaSA+PSAwIDsgaS0tKXsKCQkJY3VyTWF4ID0gTWF0aC5tYXgoYXJyW2ldICsgY3VyTWF4ICwgTWF0aC5tYXgoYXJyW2ldICwgMCkpOwoJCQltYXggPSBNYXRoLm1heChtYXggLCBjdXJNYXgpOwoJCQlhbnNbaV0gPSBtYXg7CgkJfQoJCXJldHVybiBhbnM7Cgl9Cn0K