Pagini recente » Cod sursa (job #205601) | Borderou de evaluare (job #1327171) | Borderou de evaluare (job #1326473) | Cod sursa (job #3333893) | Cod sursa (job #3330393)
#include <fstream>
using namespace std;
const int kN = 6e6;
int v[kN + 1];
long long sp[kN + 1];
/*
peste un vector v
sp[i] = v[1] + v[2] + ... + v[i]
sp[0] = 0
sum(l, r) = sp[r] - sp[l - 1]
v = 5 -6 3 4 -2 3 -3
sp = 0 5 -1 2 6 4 7 4
sp = 0 -2 -1 -10 -9 -6 -3 -5 -8
*/
int main() {
ifstream cin("ssm.in");
ofstream cout("ssm.out");
int n; cin >> n;
for (int i = 1; i <= n; i++) {
cin >> v[i];
}
for (int i = 1; i <= n; i++) {
sp[i] = sp[i - 1] + v[i];
}
long long sum_max = v[0];
int st_max = 0, dr_max = 0;
long long sp_min = 0;
int poz_min = 0;
for (int i = 0; i < n; i++) {
if (sp[i] - sp_min > sum_max) {
sum_max = sp[i] - sp_min;
st_max = poz_min + 1;
dr_max = i;
}
if (sp[i] < sp_min) {
sp_min = sp[i];
poz_min = i;
}
}
cout << sum_max << " " << st_max << " " << dr_max << "\n";
return 0;
}