Cod sursa(job #3345691)

Utilizator karinamogaMoga Karina karinamoga Data 10 martie 2026 17:23:45
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;

ifstream fin("ssm.in");
ofstream fout("ssm.out");

struct Rezultat{
    int suma;
    int st;
    int sf;

};

Rezultat ssm( int n , vector<int>&v){

    vector<int>dp(n+1);

    dp[1] = v[1];
    int sol = dp[1];
    int start=1;
    int end=1;
    int start_curent = 1;

    for(int i = 2; i<=n;i++){

        if(dp[i-1]<0){
        dp[i] = v[i];
        start_curent = i; // startul unei noi secvente dar nu stim ca e cea buna
        }
        else {
            dp[i] = dp[i-1]+v[i];
        }

        if(dp[i]>sol)
        {
            sol = dp[i];
            end = i;
            start = start_curent; // se pune in start inceputul unei secvente bune, nu e ca
            // la end, pentru ca end punem pozitia aici chiar daca am trecut prin mai multe eleemnte
            // start curent nu se actualizeaza, ci doar cand incepe o noua secv
        }
    } 

    Rezultat rez;
    rez.suma = sol;
    rez.st = start;
    rez.sf = end; 

return rez;

}

int main(){
    int i, n;
    fin >> n;
    
    vector<int> v(n+1);
    for(i = 1; i <= n; i++) {
        fin >> v[i];
    }

    Rezultat final = ssm(n,v);
    fout<<final.suma<<" "<<final.st<<" "<<final.sf;



}