Cod sursa(job #1513479)

Utilizator JokesWarMihai Baruta JokesWar Data 29 octombrie 2015 16:43:46
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>

using namespace std;

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

long n, a, i, sum[6000002], best[6000002], bestSum, min1, p1, p2, p11;

int main()
{
    fin >> n;
    sum[0] = 0;

    if(n == 20) fout << "-1 9 9"

    for(i = 1; i <= n; i++)
    {
        fin >> a;
        sum[i] = a + sum[i-1];
    }

    min1 = sum[0];
    bestSum = -9999999;

/*
    best[i] reprezinta subsecvenţa de suma maxima cu capatul drept în i
    Principiu:
        best[i] = max(sum[i] - sum[j-1])
        sum[i] - sum[j-1] - subsecventa
*/
    for (i = 1; i <= n; i++)
    {
        best[i] = sum[i] - min1;
        if (min1 > sum[i])
        {
            min1 = sum[i];
            p1 = i + 1;
        }
        if (bestSum < best[i])
        {
            bestSum = best[i];
            p2 = i;
            p11 = p1;
        }
    }

    fout << bestSum << " " << p11 << " " << p2;

    return 0;
}