Cod sursa(job #2683849)

Utilizator TeodorMorosanTeodor Morosan TeodorMorosan Data 12 decembrie 2020 10:33:25
Problema Subsecventa de suma maxima Scor 25
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>

using namespace std;
ifstream cin ("ssm.in");
ofstream cout ("ssm.out");
struct
{
    int start, sfarsit, suma;
} dp[6000001];
int n, v[6000001], i, poz, j, maxi, startbun, sfarsitbun;
int main()
{
    cin >> n;
    for(i=1;i<=n;i++)
        cin >> v[i];
    dp[1].suma=v[1];
    dp[1].start=1;
    for(i=2;i<=n;i++)
    {
        if(dp[i-1].suma+v[i]>=0)
        {
            dp[i].suma=dp[i-1].suma+v[i];
            dp[i].sfarsit=i;
            dp[i].start=poz;
        }
        else
        {
            if(i==2)
                poz=2;
            dp[i].suma=v[i];
            dp[i].sfarsit=i;
            dp[i].start=poz;
            poz=i;
        }
    }
    if(dp[n].sfarsit!=n)
    {
        dp[n].sfarsit=n;
        dp[n].start=poz;
    }
    for(i=1; i<n; i++)
    {
        if(dp[i].suma>maxi)
        {
            maxi=dp[i].suma;
            startbun=dp[i].start;
            sfarsitbun=dp[i].sfarsit;
        }
    }
    cout << maxi << ' ' << startbun << ' ' << sfarsitbun;
    return 0;
}