Cod sursa(job #1627414)

Utilizator radarobertRada Robert Gabriel radarobert Data 3 martie 2016 17:06:30
Problema Subsecventa de suma maxima Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <cstdio>
#include <algorithm>

using namespace std;

int s[6000002], start[6000002];

int main()
{
    freopen("ssm.in", "r", stdin);
    freopen("ssm.out", "w", stdout);

    int n;
    scanf("%d", &n);
    int smax = -0x3f3f3f3f;
    int left;
    int right;
    for (int i = 1; i <= n; i++)
    {
        scanf("%d", &s[i]);
        start[i] = i;
        if (s[i-1] > 0)
        {
            s[i] += s[i-1];
            start[i] = start[i-1];
        }
        if (s[i] > smax)
        {
            smax = s[i];
            left = start[i];
            right = i;
        }
        else if (s[i] == smax && i-start[i] < right-left)
        {
            left = start[i];
            right = i;
        }
    }

    printf("%d %d %d\n", smax, left, right);

    return 0;
}