Pagini recente » Cod sursa (job #1801791) | Borderou de evaluare (job #1793321) | Cod sursa (job #1930563) | Cod sursa (job #1801808) | Cod sursa (job #3304853)
#include <bits/stdc++.h>
#define NMAX 2000000
#define ll long long
using namespace std;
ifstream fin("buline.in");
ofstream fout("buline.out");
int n, x, tip;
ll s1, s2, sum, smax = INT_MIN, smin = INT_MAX, S;
int start_1, start_2, st_1, dr_1, st_2, dr_2, lmin = INT_MAX, lmax = INT_MIN, P, L;
int main() {
ios_base::sync_with_stdio(false);
fin.tie(NULL);
fout.tie(NULL);
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> x >> tip;
if (!tip) {
x *= -1;
}
sum += x;
if (s1 < 0) {
s1 = 0;
start_1 = i;
}
if (s2 > 0) {
s2 = 0;
start_2 = i;
}
s1 += x;
s2 += x;
if (s1 > smax) {
smax = s1;
st_1 = start_1;
dr_1 = i;
lmin = dr_1 - st_1 + 1;
}
else if (s1 == smax && i - start_1 + 1 < lmin) {
st_1 = start_1;
dr_1 = i;
lmin = dr_1 - st_1 + 1;
}
if (s2 < smin) {
smin = s2;
st_2 = start_2;
dr_2 = i;
lmax = dr_2 - st_2 + 1;
}
else if (s2 == smin && i - start_2 + 1 > lmax) {
st_2 = start_2;
dr_2 = i;
lmax = dr_2 - st_2 + 1;
}
}
if (smax > sum - smin) {
S = smax;
P = st_1;
L = lmin;
}
else if (smax < sum - smin) {
S = sum - smin;
if (dr_2 < n) {
P = dr_2 + 1;
}
else {
P = 1;
}
L = n - lmax;
}
else if (smax == sum - smin) {
S = smax;
if (dr_2 < n) {
P = min(st_1, dr_2 + 1);
}
else {
P = min(1, st_1);
}
L = min(lmin, n - lmax);
}
fout << S << ' ' << P << ' ' << L;
return 0;
}