HDOJ-1003: Maximum Continuous Sum

Time:2019-10-9

The title of HDOJ-1003 is as follows
Problem Description
Given a sequence a[1],a[2],a[3]……a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14.

Input
The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line starts with a number N(1<=N<=100000), then N integers followed(all the integers are between -1000 and 1000).

Output
For each test case, you should output two lines. The first line is “Case #:”, # means the number of the test case. The second line contains three integers, the Max Sum in the sequence, the start position of the sub-sequence, the end position of the sub-sequence. If there are more than one result, output the first one. Output a blank line between two cases.

Sample Input
2
5 6 -1 5 4 -7
7 0 6 -1 1 -6 7 -5

Sample Output
Case 1:
14 1 4

Case 2:
7 1 6

Given an array, find a continuous subarray in it, make it and the maximum, and output the maximum, as well as the left and right index numbers of the interval. (This output format is really annoying)
The general idea is to add up, if the current value is greater than the maximum set, then exchange. And record the left and right indexes at this time, otherwise continue to accumulate. If this time is less than 0, then discard it directly.

#include <iostream>
#include <algorithm>
using namespace std;
int a[100001];
int main(){
    int number;
    cin >> number;

    for(int i = 1; i <= number; i++){
        int max = INT_MIN;
        int t,left, right;
        cin >> t;
        left = right = 1;
        int m = 1;
        int sum = 0;
        for(int j = 1; j <= t; j++){
            cin >> a[i];
            sum += a[i];
            if(sum > max){
                max = sum;
                right = j;
                left = m;
            }
            if(sum < 0){
                sum = 0;
                m = j + 1;
            }
        }
        cout << "Case " << i << ":" << endl;
        cout << max << " "<< left << " " << right << endl;
        if( i < number )
            cout << endl;
    }
    system("pause");
    return 0;
}