#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <algorithm>
#include <stack>
#include <math.h>
#include<iostream>
#include <map>
using namespace std;
#define INF 0xfffff;//0x代表十六进制
#define M 10050
int a[M],b[M],mark[M]; //mark是并查集
int main()
{
int n;
while (cin >> n,n)
{
int m = -9999, num;
int f = 0;
for (int i = 0; i < n; i++)
{
cin >> a[i];
if (a[i] >= 0) f = 1;
b[i] = a[i];
mark[i] = i;
}
if (f)
{
for (int i = 0; i < n; i++)
{
if (a[i] + b[i - 1] > a[i])
{
b[i] = a[i] + b[i - 1];
mark[i] = i - 1;
}
if (b[i] > m)
{
m = b[i];
num = i;
}
}
if (m < 0) cout << 0;
else cout << m;
int i = num;
while (mark[i] != i)
{
i = mark[i];
}
cout << " " << a[i] << " " << a[num] << endl;
}
else cout << 0 << " " << a[0] << " " << a[n - 1] << endl;
}
return 0;
}
HDOJ1231(连续最大子序列+归并集)
最新推荐文章于 2019-05-11 16:29:30 发布