Pagini recente » Cod sursa (job #3232400) | Cod sursa (job #3179334) | Cod sursa (job #3125264) | Cod sursa (job #2380022) | Cod sursa (job #3276402)
#include <bits/stdc++.h>
using namespace std;
ifstream in("buline.in");
ofstream out("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) {
in >> n;
for (int i = 1; i <= n; i++) {
in >> v[i] >> semn;
if (!semn)
v[i] *= -1;
sum_total += v[i];
}
//suma maxima necircular
int sum = v[1], idx = 1;
for (int i = 2; 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;
dr_max = i;
}
}
//suma minima circular
sum = v[1];
idx = 1;
for (int i = 2; 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;
dr_min = i;
}
}
if (sum_max > sum_total - sum_min)
out << sum_max << " " << st_max << " " << dr_max - st_max + 1;
else
out << sum_total - sum_min << " " << dr_min + 1 << " " << n + st_min - dr_min - 1;
return 0;
}