Cod sursa(job #490378)

Utilizator delia_popescupopescu delia delia_popescu Data 6 octombrie 2010 11:20:06
Problema Buline Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<stdio.h>
int n,i,j,smax=-32000,p,v[200001],s,max1,max2,min=32000,x,y,max3,max4,x2,y2,min1,min2,min3,min4,smin;
int main(){
	FILE*f=fopen("buline.in","r");
	FILE*g=fopen("buline.out","w");
	fscanf(f,"%d",&n);
	for(i=1;i<=n;i++){
		fscanf(f,"%d %d",&x,&y);
		if(y==1)
			v[i]=x;
		else
			v[i]=-x;
		p+=v[i];
	}
	s=0; max1=1;
 for(i=1;i<=n;i++)
	{ if(s+v[i]>v[i])
		{ s=s+v[i];max2=i;}
	  else
		{s=v[i]; max2=i; max1=i;}
	  if(smax<s)
		{smax=s; max3=max1; max4=max2;}
	  else
		if(smax==s)
			if(max2-max1<max4-max3)
			  {max3=max1; max4=max2;}
	}
	//fprintf(g,"%d %d %d",smax,max3,max4);	
	for(i=1;i<=n;i++)
	{ if(s+v[i]<v[i])
		{ s=s+v[i];min2=i;}
	  else
		{s=v[i]; min2=i; min1=i;}
	  if(smin>s)
		{smin=s; min3=min1; min4=min2;}
	  else
		if(smin==s)
			if(min2-min1>min4-min3)
			  {min3=min1; min4=min2;}
	}
	//fprintf(g,"%d %d %d",smin,min3,min4);
	p-=smin;
	if(p>smax)
		fprintf(g,"%d %d %d",p,min3+1,min4+min3-2);
	else	
		fprintf(g,"%d %d %d",smax,max3,max4+max3);
	fclose(f);
	fclose(g);
	return 0;
}