题目:Max Sum
题意:求子串的最大和和此子串的始末位置
代码:
#pragma comment(linker, "/STACK:102400000,102400000")
#include "iostream"
#include "cstring"
#include "algorithm"
#include "cmath"
#include "cstdio"
#include "sstream"
#include "queue"
#include "vector"
#include "string"
#include "stack"
#include "cstdlib"
#include "deque"
#include "fstream"
#include "map"
using namespace std;
typedef long long LL;
const int INF = 0x1fffffff;
const int MAXN = 1000000+100;
#define eps 1e-14
int main()
{
int t;
cin >> t;
for(int kase = 1 ; kase <= t ; kase++)
{
int n;
cin >> n;
int num;
int sum=0,maxn = -INF,s=1,e=1,tmps=1;
for(int i = 1 ; i <= n ; i++)
{
cin >> num;
sum += num;
//这样的安排可以处理全为负数的情况
if(sum > maxn) //新的最大值,更新所有信息
{
maxn = sum;
s = tmps;
e = i;
}
if(sum < 0) //小于0了sum归零,但不着急改s
{
sum = 0;
tmps = i+1;
}
}
cout << "Case " << kase << ":" << endl;
cout << maxn << ' ' << s << ' ' << e << endl;
if(t != kase)
cout << endl;
}
return 0;
}