Cod sursa(job #3335803)

Utilizator mariusn01Marius Nicoli mariusn01 Data 23 ianuarie 2026 17:22:52
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n, x, y, st, dr, sum, Smax, stc, drc;

int main()
{
    fin >> n;
    fin >> x;
    sum = Smax = x;
    st = 1;dr = 1;
    drc = 1; /// drc va fi tot timpul i
    stc = 1;
    for(int i = 2 ; i <= n ; i++)
    {
        fin >> y;

        /// actualzarea sumei curente
        if(sum + y >= y)
        {
            sum += y;
        }
        else
        {
            sum = y;
            stc = i;
        }
        /// drc = i;


        /// analizarea sumei curente alaturi de cea optim
        if (sum > Smax) { /// ctiteriul 1
            Smax = sum;
            st = stc;
            dr = i;
        } else
            if (sum == Smax) { /// criteriul 2, indicele de inceput mai mic
                if (stc < st) {
                    st = stc;
                    dr = i;
                }
                /**else
                    if (stc == st) {

                    }
                    nu mai trebuie tratat ca nu mai aduce valoare intrucat drc este sigur mai mare decat dr altor secvente
                    determinate anterior pentru ca dr fiecarei secvente este chiar i, si noi mergem cu el crescator
                **/
            }

        if(Smax <= sum)
        {
            Smax = sum;
            dr = i;
        }
    }

    fout << Smax << " " << st << " " << dr;
    return 0;
}