Pagini recente » Cod sursa (job #443880) | Cod sursa (job #2558069) | Cod sursa (job #2237657) | Cod sursa (job #2985924) | Cod sursa (job #2771799)
#include <fstream>
#include <vector>
#include <cstdlib>
std::ifstream fin("ssm.in");
std::ofstream fout("ssm.out");
struct element {
int value;
int start_pos;
int end_pos;
element& operator= (const element& other) {
this->value = other.value;
this->start_pos = other.start_pos;
this->end_pos = other.end_pos;
return *this;
}
};
int n;
int v[6000010];
element dp[6000010];
element solve(int n) {
if(n == 0) {
dp[0].value = v[0];
dp[0].start_pos = 0;
dp[0].end_pos = 0;
return dp[0];
}
dp[n - 1] = solve(n - 1);
if (dp[n - 1].value + v[n] > v[n]) {
dp[n].value = dp[n - 1].value + v[n];
dp[n].end_pos = dp[n-1].end_pos+1;
dp[n].start_pos = dp[n - 1].start_pos;
return dp[n];
}
else {
dp[n].value = v[n];
dp[n].start_pos = n;
dp[n].end_pos = n;
return dp[n];
}
}
int main() {
fin >> n;
for (int i = 0; i < n; i++) {
fin >> v[i];
}
solve(n);
element m = { INT32_MIN, 0, 0 };
for (int i = 0; i < n; i++) {
if (m.value < dp[i].value) {
m = dp[i];
}
}
fout << m.value << ' ' << m.start_pos+1 << ' ' << m.end_pos+1 << '\n';
return 0;
}