Cod sursa(job #2274854)

Utilizator andrew_assassin789Andrei Manea andrew_assassin789 Data 2 noiembrie 2018 16:37:14
Problema Subsecventa de suma maxima Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <climits>
#define nmax 6000005
using namespace std;
int v[nmax];
int Smax,stMax,drMax;
void divide(int st, int dr)
{
    int mij=(st+dr)/2;
    if (st==dr)
        return;

    divide(st,mij);
    divide(mij+1,dr);

    int stmax,drmax,sum=0,i,st_suMax,dr_suMax;
    st_suMax=INT_MIN;
    sum=0;
    for (i=mij;i>=st;i--)
    {
        sum+=v[i];
        if (sum>st_suMax)
        {
            st_suMax=sum;
            stmax=i;
        }
    }
    dr_suMax=INT_MIN;
    sum=0;
    for (i=mij+1;i<=dr;i++)
    {
        sum+=v[i];
        if (sum>dr_suMax)
        {
            dr_suMax=sum;
            drmax=i;
        }
    }
    if (st_suMax+dr_suMax>Smax)
    {
        Smax=st_suMax+dr_suMax;
        stMax=stmax;
        drMax=drmax;
    }
}
int main()
{
    ifstream fin("ssm.in");
    ofstream fout("ssm.out");
    int n,i;
    fin>>n;
    for (i=1;i<=n;i++)
        fin>>v[i];
    divide(1,n);
    fout<<Smax<<' '<<stMax<<' '<<drMax<<'\n';
    fin.close();
    fout.close();
    return 0;
}