Pagini recente » Cod sursa (job #331580) | Cod sursa (job #2751875) | Cod sursa (job #1700229) | Cod sursa (job #1705656) | Cod sursa (job #2224286)
#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;
}