Pagini recente » Cod sursa (job #2827873) | Cod sursa (job #2519475) | Cod sursa (job #2517406) | Cod sursa (job #2303508) | Cod sursa (job #2806991)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
vector<int> starts;
int main() {
int n, value, max_sum = INT_MIN, current_sum = 0, start_pos = 0, end_pos = 0;
// current_sum - stores the maximum value between the current value and the sum of previously computed sum and current value
// max_sum - computes the maximum value between 0 and the largest value out of all current sums
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> value;
if (value > current_sum + value) {
start_pos = i;
starts.push_back(i);
}
current_sum = max(current_sum + value, value);
if (current_sum > max_sum) {
end_pos = i;
}
max_sum = max(current_sum, max_sum);
}
for (int i = 0; starts[i] <= end_pos; ++i) {
start_pos = starts[i];
}
fout << max_sum << ' ' << start_pos << ' ' << end_pos;
return 0;
}