Cod sursa(job #2916025)

Utilizator elenacazaciocElena Cazacioc elenacazacioc Data 27 iulie 2022 20:24:30
Problema Subsecventa de suma maxima Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;

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

int v[6000001];
// bst[i] = suma maxima a unei subsecvente care se termina pe pozitia i
int bst[6000001];

int main()
{
    int n, maxim, left, right;

    in >> n; 
    for (int i = 1; i <= n; i++) { // O(n)
        in >> v[i];
    }

    bst[1] = v[1]; // cazul de baza
    maxim = bst[1];
    right = 1;
    for (int i = 2; i <= n; i++) { // O(n)
        bst[i] = max(v[i], bst[i - 1] + v[i]);
        if (bst[i] > maxim) { // O(1)
            maxim = bst[i];
            right = i;
        }
    }

    // for (int i = 1; i <= n; i++) {
    //     cout << bst[i] << " ";
    // }
    // cout << '\n';

    int s = 0;
    for (int i = right; i >= 1; i--) {
        s += v[i];
        if (s == maxim) {
            left = i;
        }
    }

    cout << maxim << " " << left << " " << right << '\n';

    return 0;
}