Pagini recente » Cod sursa (job #3122409) | Cod sursa (job #2599505) | Cod sursa (job #2562008) | Cod sursa (job #2707251) | Cod sursa (job #269801)
Cod sursa(job #269801)
#include <stdio.h>
#define DIM 200001
int v[2*DIM],S[2*DIM];
long n,i,max,min,pmax,pmin,Lmax,Lmin,L,p,s,t;
int main(){
FILE *f = fopen("buline.in", "r");
FILE *g = fopen("buline.out", "w");
fscanf(f,"%ld",&n);
for (i=1; i<=n; i++) {
fscanf(f,"%d%ld",&v[i],&t);
if (!t)
v[i] *= -1;
s += v[i];
}
S[1] = v[1];
max = v[1];
L = 0; p = 1;
for (i=2; i<=n; i++) {
if (S[i-1] + v[i] >= v[i]) {
S[i] = S[i-1] + v[i];
L++;
}
else {
S[i] = v[i];
p = i;
L = 1;
}
if (S[i] > max) {
max = S[i];
pmax = p;
Lmax = L;
}
}
S[1] = v[1];
min = v[1];
L = 0; p = 1;
for (i=2; i<=n; i++) {
if (S[i-1] + v[i] <= v[i]) {
S[i] = S[i-1] + v[i];
L++;
}
else {
S[i] = v[i];
p = i;
L = 1;
}
if (S[i] < min) {
min = S[i];
pmin = p;
Lmin = L;
}
}
if (max >= s - min)
fprintf(g,"%ld %ld %ld\n",max,pmax,Lmax);
else
fprintf(g,"%ld %ld %ld\n",s-min,pmin+Lmin != n ? (pmin+Lmin)%n : n,n-Lmin);
fclose(f);
fclose(g);
return 0;
}