Cod sursa(job #1546116)

Utilizator alexandru.rusuRusu Alexandru alexandru.rusu Data 7 decembrie 2015 18:30:20
Problema Subsecventa de suma maxima Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <iostream>
#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=1,r=1,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-1])
            {
                ans=dp[i-1];
                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;
}