Cod sursa(job #2334462)

Utilizator filicriFilip Crisan filicri Data 2 februarie 2019 17:28:27
Problema Subsecventa de suma maxima Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#define nmax 6000004
using namespace std;
ifstream f("ssm.in");
ofstream g("ssm.out");
int n,v[nmax],s[nmax],maxim,minim,p1,p2,smax,lp1,lp2;
int main()
{
    f>>n;
    for (int i=1;i<=n;i++)
    {
        f>>v[i];
        s[i]=s[i-1]+v[i];
    }
    maxim=minim=smax=s[1];
    p1=p2=lp1=lp2=1;
    for (int i=2;i<=n;i++)
    {
        if (maxim<s[i])
        {
            maxim=s[i];
            p2=i;
        }
        if (minim>s[i])
        {
            minim=s[i];
            p1=i+1;
        }
        if (maxim-minim>smax)
        {
            smax=maxim-minim;
            lp1=p1;
            lp2=p2;
        }
        else if (maxim-minim==smax)
        {
            if (p1<lp1)
            {
                lp1=p1;
                lp2=p2;
            }
            else if (p1==lp1)
            {
                if (p2-p1<lp2-lp1)
                {
                    lp1=p1;
                    lp2=p2;
                }
            }
        }
    }
    g<<smax<<' '<<lp1<<' '<<lp2;
    f.close();
    g.close();
    return 0;
}