#include #include #include #include using namespace std; #define MAXN 100001 void input() { freopen("strip.in","r",stdin); freopen("strip.out","w",stdout); cin.sync_with_stdio(0); cin.tie(0); } long long a[MAXN]; struct keeper { long long val; int index; }; struct ans_keeper { long long val; int a; int b; int c; }; keeper dp1[MAXN]; keeper dp2[MAXN]; ans_keeper ans; int n; void calc_dp1() { for(int i=0;i0) { dp1[i].val=dp1[i-1].val+a[i]; dp1[i].index=dp1[i-1].index; } } } void calc_dp2() { for(int i=n-1;i>=0;i--) { dp2[i].val=-a[i]; dp2[i].index=i; if(i!=n-1&&dp2[i+1].val>0) { dp2[i].val=dp2[i+1].val-a[i]; dp2[i].index=dp2[i+1].index; } } } int main() { input(); cin>>n; for(int i=0;i>a[i]; calc_dp1(); calc_dp2(); ans.val=numeric_limits::min(); for(int i=1;ians.val) { ans.val=temp; ans.a=dp1[i-1].index; ans.b=i; ans.c=dp2[i].index; } } if(dp1[n-1].val>ans.val) { ans.val=dp1[n-1].val; ans.a=dp1[n-1].index; ans.b=n; ans.c=n-1; } if(dp2[0].val>ans.val) { ans.val=dp2[0].val; ans.a=0; ans.b=0; ans.c=dp2[0].index; } //cout<