Pagini recente » Cod sursa (job #2927481) | Borderou de evaluare (job #2019973) | Cod sursa (job #2404016) | Cod sursa (job #1953226) | Cod sursa (job #1412148)
#include <cstdio>
using namespace std;
int v[400005];
int main()
{
freopen("buline.in", "r", stdin);
freopen("buline.out", "w", stdout);
int n, i, x, y, lung, st, stm, drm, s, smax;
scanf("%d", &n);
for (i = 1; i <= n; i ++){
scanf("%d%d", &x, &y);
if (y == 0)
v[i] = -x;
else
v[i] = x;
}
for (i = 1; i <= n; i ++)
v[n + i] = v[i];
s = smax = v[1];
st = stm = drm = lung = 1;
for (i = 2; i <= 2 * n; i ++){
if (s + v[i] > v[i])
s += v[i];
else
s = v[i], st = i;
if (s > smax && i - st + 1 <= n){
stm = st;
drm = i;
smax = s;
lung = drm - stm + 1;
}
else if (s == smax && i - st < drm - stm)
stm = st, drm = i, lung = drm - stm + 1;
}
printf("%d %d %d", smax, stm, lung);
return 0;
}