Pagini recente » Cod sursa (job #555864) | Cod sursa (job #145790) | Cod sursa (job #168995) | Cod sursa (job #2944304) | Cod sursa (job #1113929)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
int n;
ifstream in("ssm.in");
ofstream out("ssm.out");
int max(int a, int b) {
return a > b ? a : b;
}
void read_array(vector<int>& v) {
int tmp;
in >> n;
for (int i = 0; i < n; i++) {
in >> tmp;
v.push_back(tmp);
}
in.close();
}
// S(k) = max(S(k - 1) + v(k), v(k))
void find_ssm(vector<int>&v) {
int start = 0, end = 0, maximum_sum;
vector<int> sum;
sum.resize(n);
sum[0] = v[0];
maximum_sum = sum[0];
for (int i = 1; i < v.size(); i++) {
sum[i] = max(sum[i - 1] + v[i], v[i]);
if (sum[i] > maximum_sum) {
end = i;
maximum_sum = sum[i];
if (sum[i] == v[i]) {
start = i;
}
}
}
for (int i = start; i < n; i++) {
if (sum[i] == maximum_sum) {
end = i;
break;
}
}
out << maximum_sum << " " << start + 1 << " " << end + 1;
}
int main() {
vector<int> v;
read_array(v);
find_ssm(v);
return 0;
}