Cod sursa(job #2430041)

Utilizator larisukCostrun Larisa Bianca larisuk Data 12 iunie 2019 15:29:52
Problema Subsecventa de suma maxima Scor 95
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include<fstream>

using namespace std;

#define INT_MIN -999999999

ifstream f("ssm.in");
ofstream g("ssm.out");

int v[6000002],n;

int maxxACUM=0;
int maxxTOTAL=INT_MIN;

int stabilire()
{int ok=0,maxx=-999999999;
    for(int i=1;i<=n;i++)
    {
        if(v[i]>0)ok=1;
        else if(v[i]>maxx)maxx=v[i];
    }
    if(ok==1) return 1;
    else return maxx;
}

int kadane(int &pif,int &pff)
{   int pi=1;
    for(int i=1;i<=n;i++)
    {
        maxxACUM+=v[i];
        if(maxxACUM<0){maxxACUM=0;
                        pi=i+1;
                        }
        else if(maxxACUM>maxxTOTAL)
        {maxxTOTAL=maxxACUM;
        if(pi!=pif)
        {
            pif=pi;
            pff=pi;
        }
        else
            pff+=i-pff;
        }

    }

    return maxxTOTAL;
}


int main()
{
    f>>n;
    int pif=0,pff=0;
    for(int i=1;i<=n;i++)
        f>>v[i];
    if(stabilire()<0)g<<stabilire();
    else g<<kadane(pif,pff)<<" ";
    g<<pif<<" "<<pff<<" ";
    f.close();
    g.close();

    return 0;
}