Cod sursa(job #2224286)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 23 iulie 2018 16:45:12
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <tuple>

using namespace std;

const string IN_FILE = "ssm.in";
const string OUT_FILE = "ssm.out";
const int INF = int((1LL << 31) - 1);

tuple<int, int, int> maxSumSubsequence(const vector<int>& values) {
    int bestSum = -INF, bestBegin = -1, bestEnd = -1;
    for (int i = 0, begin = 0, sum = 0; i < int(values.size()); i++) {
        if (sum < 0) {
            sum = values[i];
            begin = i;
        } else {
            sum += values[i];
        }
        if (sum > bestSum) {
            bestSum = sum;
            bestBegin = begin;
            bestEnd = i;
        }
    }
    return make_tuple(bestSum, bestBegin, bestEnd);
}

vector<int> readValues() {
    ifstream in(IN_FILE);
    int n;
    in >> n;
    auto values = vector<int>(n);
    for (int i = 0; i < n; i++) {
        in >> values[i];
    }
    in.close();
    return values;
}

void writeOutput(const int bestSum, const int bestBegin, const int bestEnd) {
    ofstream out(OUT_FILE);
    out <<bestSum << " " << bestBegin + 1 << " " << bestEnd + 1 << "\n";
    out.close();
}

int main() {
    const auto values = readValues();
    int bestSum, bestBegin, bestEnd;
    tie(bestSum, bestBegin, bestEnd) = maxSumSubsequence(values);
    writeOutput(bestSum, bestBegin, bestEnd);
    return 0;
}