Cod sursa(job #1546095)

Utilizator alexandru.rusuRusu Alexandru alexandru.rusu Data 7 decembrie 2015 18:10:31
Problema Subsecventa de suma maxima Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#define N 6000005
using namespace std;

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

int n,x[N],dp[N];

void citire()
{
    f>>n;
    for(int i=1;i<=n;i++)
        f>>x[i];
}

void ssm()
{
    int ans=x[1];
    dp[1]=x[1];
    int l,r,p=1,u=1;
    for(int i=2;i<=n;i++)
    {
        if(dp[i-1]+x[i]>x[i])
        {
            dp[i]=dp[i-1]+x[i];
            u=i;
        }
        else
        {
            if(ans<dp[i])
            {
                ans=dp[i];
                l=p;
                r=u;
            }
            dp[i]=x[i];
            p=i;
            u=i;
        }
        if(ans<dp[i])
            {
                ans=dp[i];
                l=p;
                r=u;
            }
    }
    if(ans<dp[n])
    {
        ans=dp[n];
        l=p;
        r=u;
    }
    g<<ans<<' '<<l<<' '<<r;
}

int main()
{
    citire();
    ssm();
    return 0;
}