Pagini recente » Cod sursa (job #1330317) | Cod sursa (job #2478897) | Cod sursa (job #1739139) | Cod sursa (job #3286169) | Cod sursa (job #1712243)
#include <stdio.h>
#include <stdlib.h>
int max(int a, int b){
return a > b ? a : b;
}
int v[200000];
int main(){
int n;
FILE*fi,*fo;
fi=fopen("buline.in","r");
fo=fopen("buline.out","w");
fscanf(fi,"%d", &n);
int sum=0;
for(int i=0;i<n;i++){
int x, y;
fscanf(fi,"%d%d", &x, &y);
if(y==1)
v[i]=x;
else
v[i]=-x;
sum+=v[i];
}
int smax=-2000000000, sprec=-1, st, len;
int stmax, lenmax;
for(int i=0;i<n;i++){
if(sprec+v[i]>v[i]){
sprec+=v[i];
len++;
}
else{
sprec=v[i];
st=i;
len=1;
}
if(sprec>smax){
smax=sprec;
stmax=st+1;
lenmax=len;
}
v[i]=-v[i];
}
int smax2=-2000000000, stmax2, lenmax2;
sprec=0;
for(int i=0;i<n;i++){
if(sprec+v[i]>v[i]){
sprec+=v[i];
len++;
}
else{
sprec=v[i];
st=i;
len=1;
}
if(sprec>smax2){
smax2=sprec;
stmax2=st+1;
lenmax2=len;
}
}
if(smax>sum+smax2)
fprintf(fo,"%d %d %d", smax, stmax, lenmax);
else
fprintf(fo,"%d %d %d", sum+smax2, stmax2+lenmax2, n-lenmax2);
fclose(fi);
fclose(fo);
return 0;
}