Cod sursa(job #2334498)

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