Cod sursa(job #539097)

Utilizator SadmannCornigeanu Calin Sadmann Data 22 februarie 2011 13:56:08
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<fstream>
using namespace std;

#define NMAX 6000001

//FILE *in,*out;
int n,S[NMAX],i;
int main()
{
    ifstream in("ssm.in");
    ofstream out("ssm.out");
    in>>n;
    for(i=1;i<=n;i++)
        in>>S[i];
    in.close();
    // In rezolvarea de mai jos, S[i] retine suma tuturor valorile intre pozitiile 1 .. i
    // best[i] = Max(S[i] - S[j]) cu j < i =>
    // best[i] = S[i] - Min(S[j]) cu j < i

    int bestsum= -(1<<30);
    int min=0,idx,begin,end;
    for(i=1;i<=n;i++)
    {
        S[i]+=S[i-1];
        if(bestsum<S[i]-min)
        {
            bestsum=S[i]-min;
            begin=idx+1;
            end=i;
        }
        if(min>S[i])
        {
            min=S[i];
            idx=i;
        }
    }
    out<<bestsum<<' '<<begin<<' '<<end;

    return 0;
}