Cod sursa(job #3266515)

Utilizator Vlad_NistorNIstor Vlad Vlad_Nistor Data 9 ianuarie 2025 09:13:30
Problema Subsecventa de suma maxima Scor 95
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>
using namespace std;

const int NMAX = 6000001;

pair<int,int> dp[NMAX]; /// dp[i] secventa care se termina in i de suma maxima si care incepe la dp[i].second

int32_t main(void){
    ofstream cout("ssm.out");
    ifstream cin("ssm.in");
    int n,x;
    cin >>  n >> x;
    dp[1].first = 1;
    dp[1].first = x; /// cazul de baza in care am o singura posibila solutie
    for(int i= 2;i <= n;i++){
        cin >> x;
        if(dp[i - 1].first + x > x){
            dp[i].second = dp[i-1].second;
            dp[i].first = dp[i-1].first + x;
        }else{
            // suntem mult mai avantajati daca incepem o noua subsecventa
            dp[i].second = i;
            dp[i].first = x;
        }
    }
    int maxim = -1e9, left = 0, right= 0 ;;
    for(int i = 1;i <= n;i++){
        if(maxim <= dp[i].first){
            maxim = dp[i].first;
            left = dp[i].second;
            right = i;
        }
    }
    cout << maxim << ' ' << left << ' ' << right;
}