Cod sursa(job #767553)

Utilizator bratualexBratu Alexandru bratualex Data 13 iulie 2012 19:51:37
Problema Subsecventa de suma maxima Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>

using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
void citire ( int &);
void ssm (int,int );
long long max ( long long ,long long );
int v[6000020];
int main()
{
    int n;
    citire(n);
    ssm (1,n);
    //fout<<n;
    return 0;
}

void ssm ( int a, int b)
{
    long long i,j,best[b-a+20],maxim,imaxs=a,istart=a,imaxsf=a;
    best[a]=v[a];
    maxim=v[a];
    for (i=a+1;i<=b;i++)
    {

        best[i]=max(v[i],best[i-1]+v[i]);
        if (v[i]>best[i-1]+v[i])
        {

            istart=i;
        }
        if(best[i]>maxim)
            {
                imaxs=istart;
                imaxsf=i;
                maxim=best[i];
            }
    }
    //if (maxim>best[b])
        fout<<maxim<<" "<<imaxs<<" "<<imaxsf;
    //else
       // fout<<best[b]<<" "<<istart<<" "<<b;
}

void citire (int &n)
{
    int i;
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>v[i];

    }
}
long long max ( long long a,long long b)
{
    if (a>b)
        return a;
    return b;
}