Cod sursa(job #425892)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 26 martie 2010 11:20:16
Problema Buline Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<stdio.h>
FILE*f=fopen("buline.in","r");
FILE*g=fopen("buline.out","w");
int v[200001],p,u,umin,umax,pmin,pmax,p2,u2,smin,smax,sant,sminant,a,b,i,nr,stotal,out,pout,lout,uout;
int min(int a, int b){
	if(a>b)
		a=b;
	return a;
}

int main (){
	fscanf(f,"%d",&nr);
	for(i=1;i<=nr;i++){
		fscanf(f,"%d %d",&a,&b);
		if(b==0)
			v[i]=-a;
		else
			v[i]=a;
	}
	sant=-99999999;
	sminant=99999999;
	smax=-99999999;
	smin=99999999;
	for(i=1;i<=nr;i++){
		if(v[i]>v[i]+sant)
			sant=v[i],p=u=i;
		else
			sant=v[i]+sant,u++;
		if(sant>smax){
			smax=sant;
			pmax=p;
			umax=u;
		}
		
		
		if(v[i]<sminant+v[i])
			sminant=v[i],p2=u2=i;
		else
			sminant=v[i]+sminant,u2++;
		if(sminant<smin){
			smin=sminant;
			pmin=p2;
			umin=u2;
		}
		stotal+=v[i];
	}
	
	if(stotal-smin>smax){
		out=stotal-smin;
		pout=umin+1;
		uout=pmin;
		lout=nr-(umin+1)+pmin;
	}
	else{
		if(stotal-smin==smax){
			pout=min(umin+1,pmax);
			if(pout==umin+1)
				lout=nr-(umin+1)+pmin;
			else
				lout=umax-pmax;
		}
		else{	
			out=smax;
			pout=pmax;
			lout=umax-pmax;
		}
	}
	
	
	fprintf(g,"%d %d %d",out,pout,lout);
	
	
	fclose(f);
	fclose(g);
	return 0;
}