Cod sursa(job #1805435)

Utilizator cosminmaneaCosmin Manea cosminmanea Data 13 noiembrie 2016 20:10:31
Problema Subsecventa de suma maxima Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <cstdio>
#include <climits>

#define max_lenght 6000010

using namespace std;

int n,v[max_lenght],suma=INT_MIN,start,sfarsit;

void mort_de_rire(int li,int lf)
{
    if(li==lf)
    {
        if(suma<v[li])
        {
            suma=v[li];
            start=sfarsit=li;
        }
        return;
    }
    int m=(li+lf)/2;
    mort_de_rire(li,m);
    mort_de_rire(m+1,lf);
    int max_suma_stanga=INT_MIN,max_suma_dreapta=INT_MIN;
    int suma_stanga=0,ind_stanga;
    int suma_dreapta=0,ind_dreapta;
    int i;
    for(i=m;i>=li;i--)
    {
        suma_stanga+=v[i];
        if(max_suma_stanga<suma_stanga)
        {
            max_suma_stanga=suma_stanga;
            ind_stanga=i;
        }
    }
    for(i=m+1;i<=lf;i++)
    {
        suma_dreapta+=v[i];
        if(max_suma_dreapta<suma_dreapta)
        {
            max_suma_dreapta=suma_dreapta;
            ind_dreapta=i;
        }
    }
    if(max_suma_dreapta+max_suma_stanga>suma)
    {
        suma=max_suma_dreapta+max_suma_stanga;
        start=ind_stanga;
        sfarsit=ind_dreapta;
    }
}

int main()
{
    FILE *f=fopen("ssm.in","r");
    FILE *g=fopen("ssm.out","w");
    int i;
    fscanf(f,"%d",&n);
    for(i=1;i<=n;i++)
        fscanf(f,"%d",&v[i]);
    mort_de_rire(1,n);
    fprintf(g,"%d %d %d ",suma,start,sfarsit);
    fclose(f);
    fclose(g);
    return 0;
}