Cod sursa(job #3350937)

Utilizator acesusTitiroaga Dragos acesus Data 14 aprilie 2026 21:08:08
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("ssm.in");
ofstream g("ssm.out");

int main()
{
    int n;
    f >> n;

    int curent_max = -2000000000; // Valoare extrem de mica, protejeaza impotriva testelor cu numere exclusiv negative
    int max_global = -2000000000;
    int start = 1, end = 1, temp_start = 1;
    int x;

    for (int i = 1; i <= n; i++)
    {
        f >> x;

        // Daca suma curenta a devenit negativa, ne "trage in jos" urmatoarele secvente.
        // O aruncam si incepem o secventa noua de la elementul curent.
        if (curent_max < 0) 
        {
            curent_max = x;
            temp_start = i;
        } 
        else 
        {
            curent_max += x;
        }

        // Daca gasim o suma strict mai mare, actualizam maximul si indicii finali.
        // Inegalitatea stricta (>) garanteaza ca nu suprascriem solutia cu o secventa 
        // de aceeasi suma care apare mai tarziu (respectand regula indicelui minim de inceput).
        if (curent_max > max_global) 
        {
            max_global = curent_max;
            start = temp_start;
            end = i;
        }
    }

    g << max_global << " " << start << " " << end << "\n";

    f.close();
    g.close();
    return 0;
}