注意输出的是对应的数值,而不是下标
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100010;
struct node
{
int st;
int ed;
int data;
}a[maxn];
int d[maxn]={0};
bool cmp(node b,node c)
{
if(b.data!=c.data)return b.data>c.data;
else return b.ed<c.ed;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&d[i]);
}
a[0].data=d[0];
a[0].st=0;
a[0].ed=0;
for(int i=1;i<n;i++)
{
if(a[i-1].data>0)
{
a[i].data=a[i-1].data+d[i];
a[i].st=a[i-1].st;
a[i].ed=i;
}
else
{
a[i].data=d[i];
a[i].st=i;
a[i].ed=i;
}
}
sort(a,a+n,cmp);
if(a[0].data<0) printf("0 %d %d",d[0],d[n-1]);
else printf("%d %d %d",a[0].data,d[a[0].st],d[a[0].ed]);
}