Pagini recente » Cod sursa (job #1235045) | Cod sursa (job #698337) | Cod sursa (job #2548281) | Cod sursa (job #3123966) | Cod sursa (job #544780)
Cod sursa(job #544780)
#include <stdio.h>
#include <limits.h>
#include <string.h>
FILE *f=fopen("buline.in","r");
FILE *g=fopen("buline.out","w");
int n;
int e[200001];
int s[200001];
int main(void){
register int i;
fscanf(f,"%d",&n);
int s1,st=0;
for(i=1;i<=n;i++){
fscanf(f,"%d %d",&e[i],&s1);
if(!s1){
e[i]=0-e[i];
}
st+=e[i];
}
fclose(f);
//determinam secventa de suma maxima cu P si U minime
int smax=INT_MIN,p,u,pa=1;
s[1]=e[1];
for(i=2;i<=n;i++){
if(s[i-1]+e[i]>e[i]){
s[i]=s[i-1]+e[i];
if(s[i]>smax){
smax=s[i];
p=pa;
u=i;
}
}else{
s[i]=e[i];
pa=i;
if(s[i]>smax){
smax=s[i];
p=pa;
u=i;
}
}
}
//determinam secventa de lungime minima cu P1 SI U1 minime
int smin=INT_MAX,p1,u1;
pa=1;
memset(s,0,sizeof(s));
s[1]=e[1];
for(i=2;i<=n;i++){
if(s[i-1]+e[i]<e[i]){
s[i]=s[i-1]+e[i];
if(s[i]<smin){
smin=s[i];
p1=pa-1;
u1=i+1;
}
}else{
s[i]=e[i];
pa=i;
if(s[i]<smin){
smin=s[i];
p1=pa-1;
u1=i+1;
}
}
}
if(st-smin>smax){
fprintf(g,"%d %d ",st-smin,u1);
fprintf(g,"%d",n-u1+1+p1);
}
else{
fprintf(g,"%d %d %d",smax,p,u-p+1);
}
return 0;
}