题目

题意:求最大子序列和,以及子序列的起始元素和终止元素,若全为负数则和为零,输出序列首尾元素

#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;
}