Cod sursa(job #2258198)

Utilizator cosmin.pascaruPascaru Cosmin cosmin.pascaru Data 10 octombrie 2018 23:34:18
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <array>
#include <algorithm>
#include <vector>
#include <stack>
#include <set>
#include <assert.h>
#include <queue>
#include <chrono>
#include <memory>
#include <cstring>

using LL = long long;
using ULL = int long long;

const std::string _problemName = "ssm";

#define USE_FILES

#ifdef USE_FILES

namespace std {
std::ifstream fin(_problemName + ".in");
std::ofstream fout(_problemName + ".out");
}

#define cin fin
#define cout fout
#endif

struct Result {
    int beginIndex;
    int endIndex;
    int sum;
};

Result computeMaximumSumSequence(const std::vector<int>& vector) {
    if (vector.empty()) {
        // exception
    }

    Result result;
    result.beginIndex = 0;
    result.endIndex = 1;
    result.sum = vector[0];

    int partialSum = 0;
    int currentBeginIndex = 0;

    for (int idx = 0; idx < vector.size(); ++idx) {
        partialSum += vector[idx];
        
        if (result.sum < partialSum) {
            result.sum = partialSum;
            result.beginIndex = currentBeginIndex;
            result.endIndex = idx + 1;
        }

        if (partialSum < 0) {
            partialSum = 0;
            currentBeginIndex = idx + 1;
        }
    }

    return result;
}

int main() {

    int n;
    std::cin >> n;

    std::vector<int> v(n);

    for (auto& it : v) {
        std::cin >> it;
    }

    Result result = computeMaximumSumSequence(v);

    std::cout << result.sum << ' ' << result.beginIndex + 1 << ' ' << result.endIndex << '\n';
    return 0;
}