Pagini recente » Cod sursa (job #2454472) | Cod sursa (job #1050495) | Cod sursa (job #1295169) | Cod sursa (job #2234210) | Cod sursa (job #25045)
Cod sursa(job #25045)
#include <stdio.h>
#define dbg if(debug)
bool debug = false;
const int N = 200000;
int v[N];
int s[N];
int p[N];
int l[N];
int main() {
freopen("buline.in", "r", stdin);
freopen("buline.out", "w", stdout);
int n;
scanf("%d",&n);
for (int i = 0; i<n; ++i) {
int a;
scanf("%d %d",&v[i],&a);
if (a == 0) v[i] = -v[i];
dbg fprintf(stderr,"%d ",v[i]);
}
dbg fprintf(stderr,"\n");
s[0] = v[0];
p[0] = 0;
l[0] = 1;
dbg fprintf(stderr,"s p l\n%d %d %d\n",s[0],p[0],l[0]);
for (int i = 1; i<n; ++i) {
if (s[i-1] > 0) {
s[i] = s[i-1] + v[i];
p[i] = p[i-1];
l[i] = l[i-1] + 1;
} else {
s[i] = v[i];
p[i] = i;
l[i] = 1;
}
dbg fprintf(stderr,"%d %d %d\n",s[i],p[i],l[i]);
}
dbg fprintf(stderr,"Refacute de la 1:\n");
for (int i = 0; i<n; ++i) {
int i1 = (i-1==-1) ? n-1 : i-1;
if (s[i1] + v[i] > s[i] && i<p[i1]) {
s[i] = s[i1] + v[i];
p[i] = p[i1];
l[i] = l[i1] + 1;
} else {
break;
}
dbg fprintf(stderr,"%d %d %d\n",s[i],p[i],l[i]);
}
int pm = 0;
for (int i = 1; i<n; ++i) {
if (s[i] > s[pm]) {
pm = i;
} else
if (s[i] == s[pm]) {
if (p[i] < p[pm]) {
pm = i;
} else
if (p[i] == p[pm]) {
if (l[i] < p[pm]) {
pm = i;
}
}
}
}
printf("%d %d %d\n",s[pm],p[pm]+1,l[pm]);
return 0;
}