Pagini recente » Cod sursa (job #3122425) | Cod sursa (job #3287768) | Cod sursa (job #1017645) | Istoria paginii descriere/ordonare/prea-usor | Cod sursa (job #3283944)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("buline.in");
ofstream fout("buline.out");
int n, semn, v[200010], sum_max = INT_MIN, sum_min = INT_MAX, sum_total;
int st_min = 1, dr_min = 1, st_max = 1, dr_max = 1;
int main(void) {
fin >> n;
for (int i = 0; i < n; ++i) {
fin >> v[i] >> semn;
if (!semn)
v[i] *= -1;
sum_total += v[i];
}
int sum = v[0], idx = 1;
for (int i = 1; i < n; ++i) {
if (sum + v[i] >= v[i])
sum += v[i];
else {
sum = v[i];
idx = i;
}
if (sum > sum_max) {
sum_max = sum;
st_max = idx + 1;
dr_max = i + 1;
}
}
sum = v[0];
idx = 1;
for (int i = 1; i < n; ++i) {
if (sum + v[i] <= v[i])
sum += v[i];
else {
sum = v[i];
idx = i;
}
if (sum < sum_min) {
sum_min = sum;
st_min = idx + 1;
dr_min = i + 1;
}
}
if (sum_max > sum_total - sum_min)
fout << sum_max << " " << st_max << " " << dr_max - st_max + 1;
else
fout << sum_total - sum_min << " " << dr_min + 1 << " " << n + st_min - dr_min - 1;
return 0;
}