Cod sursa(job #2763397)

Utilizator gabimoiseMoise Gabriel gabimoise Data 13 iulie 2021 17:22:50
Problema Subsecventa de suma maxima Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>

using namespace std;

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

int best[6000050], l[6000050], arr[6000050], i, n, maxSum, minIndex, minLength, r;

int main()
{
    fin >> n;
    for (i = 0; i < n; i++)
        fin >> arr[i];
    best[0] = arr[0];
    l[0] = 0;
    for (i = 1; i < n; i++)
        if (best[i-1] > 0) { best[i] = best[i-1] + arr[i]; l[i] = l[i-1]; }
        else { best[i] = arr[i]; l[i] = i; }
    maxSum = best[0];
    for (i = 0; i < n; i++)
        if (best[i] > maxSum) maxSum = best[i];
    minIndex = n + 1;
    for (i = 0; i < n; i++)
        if (best[i] == maxSum && l[i] < minIndex) minIndex = l[i];
    minLength = n + 1;
    r = -1;
    for (i = 0; i < n; i++)
        if (best[i] == maxSum && l[i] == minIndex && i - l[i] < minLength) { minLength = i - l[i]; r = i; }
    fout << maxSum << " " << minIndex + 1 << " " << r + 1 << endl;
    return 0;
}