Cod sursa(job #3216566)

Utilizator SilviuC25Silviu Chisalita SilviuC25 Data 18 martie 2024 08:09:48
Problema Subsecventa de suma maxima Scor 25
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>
using namespace std;

const int MAX_SIZE = 1e3 * 6;

ifstream fin("ssm.in");
ofstream fout("ssm.out");

int main() {
    int arraySize;
    fin >> arraySize;
    long arr[MAX_SIZE + 1];
    for (int i = 0; i < arraySize; ++i) {
        fin >> arr[i];
    }
    long maxSum = LONG_MIN, firstIndex = 0, secondIndex = 0, partialFirstIndex = 0, partialSecondIndex = 0;
    long partialMaxSum[MAX_SIZE + 1] = {LONG_MIN};
    partialMaxSum[0] = arr[0];
    for (int i = 1; i < arraySize; ++i) {
        if (arr[i] > partialMaxSum[i - 1] + arr[i]) {
            partialMaxSum[i] = arr[i];
            partialFirstIndex = i;
            partialSecondIndex = i;
        } else {
            partialMaxSum[i] = partialMaxSum[i - 1] + arr[i];
            ++partialSecondIndex;
        }
        if (maxSum < partialMaxSum[i]
            || (maxSum == partialMaxSum[i] && partialFirstIndex + 1 < firstIndex)
            || (maxSum == partialMaxSum[i] && partialFirstIndex + 1 == firstIndex && partialSecondIndex - 1 < secondIndex)) {
            maxSum = partialMaxSum[i];
            firstIndex = partialFirstIndex + 1;
            secondIndex = partialSecondIndex + 1;
        }
    }
    fout << partialMaxSum[secondIndex - 1] << " " << firstIndex << " " << secondIndex;
    return 0;
}