前言
在线处理
#include <iostream>
using namespace std;
#define MAX 100000
int main() {
int K, tmp, left, right, ThisSum = 0, MaxSum = 0;;
int A[MAX];
bool flag = true;
cin >> K;
for( int i = 0; i < K; i++ )
cin >> A[i];
// 初始化, 若都为负数则这样输出
left = A[0];
right = A[K-1];
for( int i = 0; i < K; i++ ) {
ThisSum += A[i];
if( A[i] >= 0 && flag ) { // 有正数, 开始子列(flag)
tmp = A[i]; // 子列中第一个数(同时也是正数)
flag = false; // 子列开始后上锁
}
if( ThisSum > MaxSum || (ThisSum == 0 && MaxSum == 0) ) { // 更大则更新 或 "0"的情况
MaxSum = ThisSum; // 最大值更新
left = tmp; // 更新最左
right = A[i]; // 更新最右
}
else if( ThisSum < 0 ) { // 一旦小于0则丢弃当前的 和 与 子列
ThisSum = 0; // 当前和归0
flag = true; // 解锁, 子列可重新开始
}
}
cout << MaxSum << " " << left << " " << right;
}