#include <iostream>
using namespace std;
#include<bits/stdc++.h>
int main() {
// your code goes here
int arr[] = {-2,1,-3,4,-1,2,1,-5,4};
int n = sizeof(arr)/sizeof(int);
//p1 is prefix sum (maximum sub array sum ending at index i
vector<int>p1(n);
p1[0]=max(arr[0],0);
for(int i = 1 ; i< n ; i++){
p1[i] = max({p1[i-1]+arr[i] , arr[i],0});
}
//now create maximum subb array sum starting at index i ( p2 suffix sum )
vector<int>p2(n);
p2[n-1]=max(arr[n-1],0);
for(int i = n-2;i>=0;i--){
p2[i]=max({p2[i+1]+arr[i],arr[i],0});
}
vector<int>max_p1(n); //max of max sub array sum ending at i
max_p1[0]=p1[0];
for(int i = 1;i<n;i++){
max_p1[i]=max(max_p1[i-1],p1[i]);
}
vector<int>max_p2(n); //max of max sub array sum starting at i
max_p2[n-1]=p2[n-1];
for(int i = n-2;i>=0;i--){
max_p2[i]=max(max_p2[i+1],p2[i]);
}
int max_sum = INT_MIN;
for(int stick =0;stick<n-1;stick++){
int left_maxsum = max_p1[stick];
int right_maxsum=max_p2[stick+1];
max_sum = max(left_maxsum+right_maxsum, max_sum);
}
cout<<max_sum;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgoKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglpbnQgYXJyW10gPSB7LTIsMSwtMyw0LC0xLDIsMSwtNSw0fTsKCWludCBuID0gc2l6ZW9mKGFycikvc2l6ZW9mKGludCk7CgkvL3AxIGlzIHByZWZpeCBzdW0gKG1heGltdW0gc3ViIGFycmF5IHN1bSBlbmRpbmcgYXQgaW5kZXggaSAgCgl2ZWN0b3I8aW50PnAxKG4pOwoJcDFbMF09bWF4KGFyclswXSwwKTsKCWZvcihpbnQgaSA9IDEgOyBpPCBuIDsgaSsrKXsKCQlwMVtpXSA9IG1heCh7cDFbaS0xXSthcnJbaV0gLCBhcnJbaV0sMH0pOwoJfQoJLy9ub3cgY3JlYXRlIG1heGltdW0gc3ViYiBhcnJheSBzdW0gc3RhcnRpbmcgYXQgaW5kZXggaSAoIHAyIHN1ZmZpeCBzdW0gKQoJdmVjdG9yPGludD5wMihuKTsKCXAyW24tMV09bWF4KGFycltuLTFdLDApOwoJZm9yKGludCBpID0gbi0yO2k+PTA7aS0tKXsKCQlwMltpXT1tYXgoe3AyW2krMV0rYXJyW2ldLGFycltpXSwwfSk7Cgl9Cgl2ZWN0b3I8aW50Pm1heF9wMShuKTsgLy9tYXggb2YgbWF4IHN1YiBhcnJheSBzdW0gZW5kaW5nIGF0IGkgCgltYXhfcDFbMF09cDFbMF07Cglmb3IoaW50IGkgPSAxO2k8bjtpKyspewoJCW1heF9wMVtpXT1tYXgobWF4X3AxW2ktMV0scDFbaV0pOwoJfQoJdmVjdG9yPGludD5tYXhfcDIobik7IC8vbWF4IG9mIG1heCBzdWIgYXJyYXkgc3VtIHN0YXJ0aW5nIGF0IGkgCgltYXhfcDJbbi0xXT1wMltuLTFdOwoJZm9yKGludCBpID0gbi0yO2k+PTA7aS0tKXsKCQltYXhfcDJbaV09bWF4KG1heF9wMltpKzFdLHAyW2ldKTsKCX0KCWludCBtYXhfc3VtID0gSU5UX01JTjsKCWZvcihpbnQgc3RpY2sgPTA7c3RpY2s8bi0xO3N0aWNrKyspewoJCWludCBsZWZ0X21heHN1bSA9IG1heF9wMVtzdGlja107CgkJaW50IHJpZ2h0X21heHN1bT1tYXhfcDJbc3RpY2srMV07CgkJbWF4X3N1bSA9IG1heChsZWZ0X21heHN1bStyaWdodF9tYXhzdW0sIG1heF9zdW0pOwoJfQoJY291dDw8bWF4X3N1bTsKCXJldHVybiAwOwp9