您的位置:首页 > 其它

HDOJ1231(连续最大子序列+归并集)

2017-10-30 21:31 190 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: