Pagini recente » Cod sursa (job #1546972) | Cod sursa (job #2488329) | Cod sursa (job #539864) | Cod sursa (job #2022592) | Cod sursa (job #2038872)
#include <fstream>
#define NMAX 600005
std::ifstream cin("ssm.in");
std::ofstream cout("ssm.out");
struct SSM {
SSM(int n) : start_(0), stop_(0), n_(n), max_(0) {}
void read() {
for (int i = 0; i < n_; i++) {
cin >> sums_[i];
mins_[i] = i;
}
max_ = sums_[0];
start_ = 0;
stop_ = 0;
}
void build() {
for (int i = 1; i < n_; i++) {
sums_[i] += sums_[i - 1];
if (sums_[mins_[i]] >= sums_[mins_[i - 1]]) {
mins_[i] = mins_[i - 1];
}
if (sums_[i] - sums_[mins_[i - 1]] > max_) {
start_ = mins_[i - 1];
stop_ = i;
max_ = sums_[i] - sums_[mins_[i - 1]];
}
}
}
void printSolution() {
cout << max_ << " " << start_ + 2 << " " << stop_ + 1;
}
private:
int sums_[NMAX];
int mins_[NMAX];
int start_, stop_, n_, max_;
};
int main() {
int n;
cin >> n;
SSM ssm(n);
ssm.read();
ssm.build();
ssm.printSolution();
cin.close();
cout.close();
return 0;
}