Cod sursa(job #1691785)

Utilizator diviadivia negoescu divia Data 19 aprilie 2016 13:47:55
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#include <limits.h>

FILE *fin,*fout;
int n,i,v[6000001],smax,sbynow,start,startmax,endmax,xmax_negativ,ind,x;

int main()
{
    fin=fopen("ssm.in","r");
    fout=fopen("ssm.out","w");
    fscanf(fin,"%d\n",&n);
    xmax_negativ=INT_MIN;
    for(i=1;i<=n;i++)
    {
        fscanf(fin,"%d ",&v[i]);
        if(v[i]<0 && v[i]>xmax_negativ)
        {
            xmax_negativ=v[i];
            ind=i;
        }
        x=v[i]+sbynow;
        if(x<0){x=0;start=0;}
        else if(x>=0)
        {
            if(start==0){start=i;}
        }
        sbynow=x;
        if(sbynow>smax)
        {
            smax=sbynow;
            startmax=start;
            endmax=i;
        }
        else if(sbynow==smax)
        {
            int l1, l2;
            l1=endmax-startmax+1;
            l2=i-start+1;
            if(l2<l1){endmax=i; startmax=start;}
        }
    }
    if(smax==0)
    {
        fprintf(fout,"%d %d %d",xmax_negativ,ind,ind);
    }
    else fprintf(fout,"%d %d %d",smax,startmax,endmax);
    return 0;
}