题意:求最大子序列和,以及子序列的起始元素和终止元素,若全为负数则和为零,输出序列首尾元素
#include<iostream>
using namespace std;
int main() {
int n,m=-1,b=0;
scanf("%d",&n);
int a[n],s=0,e=0,l,r;
for(int i=0; i<n; i++) {
cin>>a[i];
b+=a[i];
e=i;
if(b>m) {
m=b;//更新最值以及起终点
l=s;
r=e;
}
if(b<0) {
b=0;//重置起点
s=i+1;
e=i+1;
}
}
if(m>=0)
cout<<m<<" "<<a[l]<<" "<<a[r];
else cout<<0<<" "<<a[0]<<" "<<a[n-1];
return 0;
}