Cod sursa(job #2274933)

Utilizator andrew_assassin789Andrei Manea andrew_assassin789 Data 2 noiembrie 2018 17:42:21
Problema Subsecventa de suma maxima Scor 85
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <fstream>
#include <climits>
#define nmax 6000005
using namespace std;
int v[nmax];
int Smax=INT_MIN,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)
    {
        if (stMax==stmax)
        {
            if (drMax>drmax)
            {
                stMax=stmax;
                drMax=drmax;
            }
        }
        else
            if (stMax>stmax)
            {
                stMax=stmax;
                drMax=drmax;
            }
    }
    else
        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;
}