Cod sursa(job #1991850)

Utilizator vladm98Munteanu Vlad vladm98 Data 18 iunie 2017 15:36:34
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.81 kb
#include <fstream>

using namespace std;

ifstream fin ("ssm.in");
ofstream fout("ssm.out");

int v[6000001];

int main()
{
    int n, dr=1, st=1, suma, maxim=(-1<<31)+1, ind_st, ind_dr;
    fin>>n;
    for (int i=1;i<=n;++i)
        fin>>v[i];
    while (v[dr]<0 && dr<=n)
    {
        st = dr;
        suma=v[dr];
        if (maxim<suma)
        {
            maxim=suma;
            ind_dr=dr;
            ind_st=st;
        }
        ++dr;
    }
    if (dr<=n)
    {
        st=dr;
        suma=v[dr];
        if (maxim<suma)
        {
            maxim=suma;
            ind_dr=dr;
            ind_st=st;
        }
    }
    while (dr<n)
    {
        if (suma+v[dr+1]>0 && dr+1<=n)
        {
            dr++;
            suma+=v[dr];
            if (maxim<suma)
            {
                maxim=suma;
                ind_dr=dr;
                ind_st=st;
            }
        }
        else
        {
            dr++;
            st=dr;
            suma=v[dr];
            if (maxim<suma)
            {
                maxim=suma;
                ind_dr=dr;
                ind_st=st;
            }
            while (v[dr+1]<0 && dr+1<=n)
            {
                dr++;
                st=dr;
                suma=v[dr];
                if (maxim<suma)
                {
                    maxim=suma;
                    ind_dr=dr;
                    ind_st=st;
                }
            }
            if (dr<n)
            {
                dr++;
                st=dr;
                suma=v[dr];
                if (maxim<suma)
                {
                    maxim=suma;
                    ind_dr=dr;
                    ind_st=st;
                }
            }
        }
    }
    fout<<maxim<<" "<<ind_st<< " "<<ind_dr;
}