#include <bits/stdc++.h>
using namespace std;
vector<int>getprefixMax(vector<int>&arr){
int n=arr.size();
vector<int>newprefixSum(n+1,0);
int curr=arr[1];
newprefixSum[1]=arr[1];
for(int i=2;i<=n;i++){
curr=max({0,curr+arr[i],arr[i]});
newprefixSum[i]=curr;
}
return newprefixSum;
}
vector<int>getsuffixMax(vector<int>&arr){
int n=arr.size();
vector<int>newsuffixSum(n+1,0);
int curr=arr[n];
newsuffixSum[n]=arr[n];
for(int i=n-1;i>0;i--){
curr=max({0,curr+arr[i],arr[i]});
newsuffixSum[i]=curr;
}
return newsuffixSum;
}
int getMaxSum(vector<int>&arr){
int n=arr.size();
vector<int>prefixMax=getprefixMax(arr);
vector<int>suffixMax=getsuffixMax(arr);
vector<int>finalprefixMax(n+2,0);
vector<int>finalsuffixMax(n+2,0);
finalprefixMax[1]=prefixMax[1];
for(int i=2;i<=n;i++){
finalprefixMax[i]=max(finalprefixMax[i-1],prefixMax[i]);
}
finalsuffixMax[n]=prefixMax[n];
for(int i=n-1;i>0;i--){
finalsuffixMax[i]=max(finalsuffixMax[i+1],suffixMax[i]);
}
int finalMax=0;
for(int i=0;i<=n;i++){
finalMax=max({finalMax,finalprefixMax[i]+finalsuffixMax[i+1]});
}
return finalMax;
}
int main() {
// your code goes here
int n;
cin>>n;
vector<int>arr(n+1);
for(int i=1;i<=n;i++){
cin>>arr[i];
}
cout<<"The maximum sum of non-overlapping subarrays is:"<<getMaxSum(arr);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZlY3RvcjxpbnQ+Z2V0cHJlZml4TWF4KHZlY3RvcjxpbnQ+JmFycil7CglpbnQgbj1hcnIuc2l6ZSgpOwoJdmVjdG9yPGludD5uZXdwcmVmaXhTdW0obisxLDApOwoJaW50IGN1cnI9YXJyWzFdOwoJbmV3cHJlZml4U3VtWzFdPWFyclsxXTsKCWZvcihpbnQgaT0yO2k8PW47aSsrKXsKCQljdXJyPW1heCh7MCxjdXJyK2FycltpXSxhcnJbaV19KTsKCQluZXdwcmVmaXhTdW1baV09Y3VycjsKCX0KCXJldHVybiBuZXdwcmVmaXhTdW07CiAKfQp2ZWN0b3I8aW50PmdldHN1ZmZpeE1heCh2ZWN0b3I8aW50PiZhcnIpewoJaW50IG49YXJyLnNpemUoKTsKCXZlY3RvcjxpbnQ+bmV3c3VmZml4U3VtKG4rMSwwKTsKCWludCBjdXJyPWFycltuXTsKCW5ld3N1ZmZpeFN1bVtuXT1hcnJbbl07Cglmb3IoaW50IGk9bi0xO2k+MDtpLS0pewoJCWN1cnI9bWF4KHswLGN1cnIrYXJyW2ldLGFycltpXX0pOwoJCW5ld3N1ZmZpeFN1bVtpXT1jdXJyOwoJfQoJcmV0dXJuIG5ld3N1ZmZpeFN1bTsKIAp9CiAKaW50IGdldE1heFN1bSh2ZWN0b3I8aW50PiZhcnIpewoJaW50IG49YXJyLnNpemUoKTsKCXZlY3RvcjxpbnQ+cHJlZml4TWF4PWdldHByZWZpeE1heChhcnIpOwoJdmVjdG9yPGludD5zdWZmaXhNYXg9Z2V0c3VmZml4TWF4KGFycik7CiAKCXZlY3RvcjxpbnQ+ZmluYWxwcmVmaXhNYXgobisyLDApOwoJdmVjdG9yPGludD5maW5hbHN1ZmZpeE1heChuKzIsMCk7CiAKCWZpbmFscHJlZml4TWF4WzFdPXByZWZpeE1heFsxXTsKCWZvcihpbnQgaT0yO2k8PW47aSsrKXsKCQlmaW5hbHByZWZpeE1heFtpXT1tYXgoZmluYWxwcmVmaXhNYXhbaS0xXSxwcmVmaXhNYXhbaV0pOwoJfQogCglmaW5hbHN1ZmZpeE1heFtuXT1wcmVmaXhNYXhbbl07Cglmb3IoaW50IGk9bi0xO2k+MDtpLS0pewoJCWZpbmFsc3VmZml4TWF4W2ldPW1heChmaW5hbHN1ZmZpeE1heFtpKzFdLHN1ZmZpeE1heFtpXSk7Cgl9CglpbnQgZmluYWxNYXg9MDsKCWZvcihpbnQgaT0wO2k8PW47aSsrKXsKCQlmaW5hbE1heD1tYXgoe2ZpbmFsTWF4LGZpbmFscHJlZml4TWF4W2ldK2ZpbmFsc3VmZml4TWF4W2krMV19KTsKCX0KCXJldHVybiBmaW5hbE1heDsKIAp9CiAKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglpbnQgbjsKCWNpbj4+bjsKCXZlY3RvcjxpbnQ+YXJyKG4rMSk7Cglmb3IoaW50IGk9MTtpPD1uO2krKyl7CgkJY2luPj5hcnJbaV07Cgl9Cgljb3V0PDwiVGhlIG1heGltdW0gc3VtIG9mIG5vbi1vdmVybGFwcGluZyBzdWJhcnJheXMgaXM6Ijw8Z2V0TWF4U3VtKGFycik7CiAKIAoJcmV0dXJuIDA7Cn0=