最大子段和
#include<bits/stdc++.h>
using namespace std;
int main()
{
int k;
cin>>k;
int i = 0,j = 0;//标记最大字段和的开始数字和结束数字
int a[10010];
for(int i = 0;i<k;i++)
{
cin>>a[i];
}
int flag = 1;//全是负数
for(int i = 0;i<k;i++)
{
if(a[i]>=0)
{
flag = 0;
break;
}
}
if(flag)//全是负数
{
cout<<"0 "<<a[0]<<" "<<a[k-1]<<endl;
return 0;
}
long long sum = a[0];
i = j = 0;//初始
int i1,j1;
i1 = j1 = 0;
long long maxi_num = a[0];
for(int index = 1;index<k;index++)
{
if((sum+a[index])>=a[index])
{
j++;
sum += a[index];
}
else
{
i = j = index;
sum = a[index];
}
if(sum>maxi_num)
{
i1 = i;
j1 = j;
maxi_num = sum;
}
}
cout<<maxi_num<<" "<<a[i1]<<" "<<a[j1];
return 0;
}