Cod sursa(job #3314373)

Utilizator Denis20008924Mitrasca Denis Denis20008924 Data 9 octombrie 2025 21:04:11
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
#include <climits>

using namespace std;

ifstream cin("ssm.in");
ofstream cout("ssm.out");

int n, nr, DPCrt, DPAnt, PozAnt, SumMax = INT_MIN, st, dr;

int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> nr;
        DPCrt = max(nr, nr + DPAnt);
        if(DPCrt > SumMax)
            SumMax = DPCrt, st = PozAnt, dr = i;
        else if(DPCrt == SumMax){
            if(PozAnt < st)
                st = PozAnt, dr = i;
            else if(PozAnt == st)
                if(i - PozAnt + 1 < dr - st + 1)
                    st = PozAnt, dr = i;
        }

        if(DPCrt < 0)
            PozAnt = i + 1;
        DPAnt = DPCrt;
    }

    cout << SumMax << " " << st << " " << dr;
    return 0;
}

/**
    Compilare pentru exemplu:

    1. DPCrt = 5, SumMax = 5, st = 1, dr = 1, PozAnt = 0, DPAnt = 5
    2. DPCrt = -1, SumMax = 5, st = 1, dr = 1, PozAnt = 3, DPAnt = -1
    3. DpCrt = 3, SumMax = 5, st = 1, dr = 1, PozAnt = 3, DPAnt = 3
    4. DPCrt = 7, SumMax = 7, st = 3, dr = 4, PozAnt = 3, DPAnt = 7
    5. DPCrt = 5, SumMax = 7, st = 3, dr = 4, PozAnt = 3, DPAnt = 5
    6. DpCrt = 8, SumMax = 8, st = 3, dr = 6, PozAnt = 3, DPAnt = 8
    7. DPCrt = 5, SumMax = 8, st = 3, dr = 6, PozAnt = 3, DPAnt = 5
**/