Cod sursa(job #2847796)

Utilizator GeorgeAndreiGeorge Andrei Iarca GeorgeAndrei Data 11 februarie 2022 14:52:00
Problema Subsecventa de suma maxima Scor 35
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
// Subsecv de suma maxima
#include<iostream>
#include<fstream>
#include<climits>
#include<vector>

using namespace std;

int dr = 1, st = 0, bestSubseq = INT_MIN, maxVal = INT_MIN;
int a[6000005], n; 

// void ssm() {
//     vector<int> sum(values.size());

//     sum[0] = values[0];

//     for (int i = 1; i < values.size(); i++)
//         sum[i] = sum[i - 1] + values[i];

//     vector<int> best(values.size());

//     int min = sum[0];

//     for (int i = 1; i < values.size(); i++) {
//         best[i] = sum[i] - min;

//         if (min > sum[i]) {
//             min = sum[i];
//             st = i + 2;
//         }

//         if (bestSubseq < best[i]) {
//             bestSubseq = best[i];
//             dr = i + 1;
//         }
//     }

// }

void ssm() {
    vector<int> sum(n + 1);

    sum[0] = 0;
    maxVal = sum[0];

    st = 0, dr = 1;

    for (int i = 1; i <= n; i++) {
        sum[i] = a[i] + sum[i - 1];
    }

    for (int i = 1; i <= n; i++) {
        for (int j = i; j <= n; j++) {
            if (sum[j] - sum[i - 1] > maxVal)
                st = i, dr = j, maxVal = sum[j] - sum[i - 1];
        }
    }
}

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

    cin >> n;

    for(int i = 1; i <= n; i++) {
        cin >> a[i];
    }

    ssm();
    cout << maxVal << " " << st << " " << dr;

    return 0;
}