Cod sursa(job #3142281)

Utilizator raulandreipopRaul-Andrei Pop raulandreipop Data 20 iulie 2023 13:56:32
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>

using namespace std;
const int INF = 1e9; //1'000'000'000
const int NMAX = 6'000'001;

 /// int a[NMAX];
int dp[NMAX]; // suma maxima a unei subsecvente care se termina in i
int start[NMAX]; // inceputul subsecventei de suma maxima care se termina in i

int main ()
{
    freopen("ssm.in" , "r" , stdin);
    freopen("ssm.out" , "w" , stdout);
    int n; cin >> n;
    int ans = -INF;
    int startAns, endAns;

    int a;
    for (int i = 1; i <= n; i++)
    {
        cin >> a;
        if (dp[i-1] >= 0) 
        {
            start[i] = start[i-1];
            dp[i] = dp[i-1] + a;
        }
        else // 
        {
            start[i] = i;
            dp[i] = a;
        }

        // updatam ans
        if (ans < dp[i])
        {
            ans = dp[i];
            startAns = start[i];
            endAns = i;
        }
    }

    cout << ans << ' ' << startAns << ' ' << endAns << '\n';
}