Cod sursa(job #3216569)

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

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

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