Cod sursa(job #1929524)

Utilizator DanyBvGeorge-Daniel Gagiu DanyBv Data 17 martie 2017 18:59:57
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>
#include <cstdio>

#define NMAX 6000001

using namespace std;

void solve(int s[], int n, int i, int sum, int tstart, int &maxsum, int &maxstart, int &maxend)
{
    if(i >= n) return;
    sum += s[i];
    if(sum > maxsum)
    {
        maxsum = sum;
        maxstart = tstart;
        maxend = i;
    }
    if(sum < 0)
    {
        sum = 0;
        tstart = i + 1;
    }
    solve(s, n, i + 1, sum, tstart, maxsum, maxstart, maxend);
}

int s[NMAX];
int main()
{
    int n, maxsum, maxstart, maxend;
    freopen("ssm.in", "r", stdin);
    scanf("%d", &n);
    for(int i = 0; i < n; i++)
        scanf("%d", &s[i]);
    maxsum = s[0];
    maxstart = maxend = 0;
    solve(s, n, 0, s[0], 0, maxsum, maxstart, maxend);
    freopen("ssm.out", "w", stdout);
    printf("%d %d %d\n", maxsum, maxstart + 1, maxend + 1);
    return 0;
}