#include <stdlib.h>
#include <stdio.h>
long int theta_nn(long int *v,long int n,long int *st,long int *dr)
{
long int i,j, sum, sum_max=0;
for(i=0;i<n-1;i++)
{
sum = 0;
for(j=i; j<n; j++)
{
sum+=v[j];
if(sum > sum_max)
{
sum_max = sum;
*st = i;
*dr = j;
}
}
}
return sum_max;
}
typedef struct elemente
{
int sum;
int st;
int dr;
} elemente;
elemente theta_nlgn(int v[], int n, int st, int dr)
{
elemente primul, al_doilea;
if(dr-st == 1)
{
elemente element_sum;
element_sum.st = st;
element_sum.dr = dr;
element_sum.sum = v[st]+v[dr];
return element_sum;
}
else if(st == dr)
{
elemente element_sum;
element_sum.st = st;
element_sum.dr = dr;
element_sum.sum = v[st];
return element_sum;
}
int m = (st+dr)/2;
/*primul.st = st;
primul.dr = m;
al_doilea.st = m+1;
al_doilea.dr = dr;*/
primul = theta_nlgn(v, n, st, m);
al_doilea = theta_nlgn(v, n, m+1, dr);
if((primul.sum + al_doilea.sum > primul.sum) && (primul.sum + al_doilea.sum > al_doilea.sum)
&& (al_doilea.st - primul.dr == 1 ))
{
elemente element_suma;
element_suma.st = primul.st;
element_suma.dr = al_doilea.dr;
element_suma.sum = primul.sum + al_doilea.sum;
return element_suma;
}
else if(primul.sum > al_doilea.sum)
{
return primul;
}
else
{
return al_doilea;
}
}
elemente theta_n(int v[], int n)
{
int sum = 0, i;
elemente best_element;
best_element.st = 0;
best_element.sum = -2000000;
for(i=0; i<n; i++)
{
if(sum < 0)
{
sum = v[i];
best_element.st = i;
best_element.dr = i;
}
else
{
sum+=v[i];
}
if(best_element.sum < sum)
{
best_element.sum = sum;
best_element.dr = i;
}
}
return best_element;
}
int main()
{
long int i,n=0, *v, sum=0, st=0, dr=0;
FILE* in = fopen("ssm.in", "r");
FILE* out = fopen("ssm.out", "w");
fscanf(in,"%ld", &n);
v = (long int*) malloc((sizeof(long int))*(n+1));
for(i=0; i<n; i++)
{
fscanf(in, "%ld", &v[i]);
}
sum = theta_nn(v, n, &st, &dr);
fprintf(stdout, "%ld %ld %ld", sum, st+1, dr+1);
//elemente rez = nlgn(v,n,0,n-1);
//printf("%d %d %d", rez.sum, rez.st, rez.dr);
//elemente best = theta_n(v,n);
//fprintf(out, "%d %d %d", best.sum, best.st, best.dr);
fclose(in);
fclose(out);
return 0;
}