Cod sursa(job #1409418)

Utilizator stefan.friptuPetru Stefan Friptu stefan.friptu Data 30 martie 2015 15:22:09
Problema Buline Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <cstdio>

using namespace std;

long a[200001],tip,smax,smax2,s,n,cycle,beginf1,beginf2,cntf1,cntf2,cnt;

int main()
{
    freopen("buline.in","r",stdin);
    freopen("buline.out","w",stdout);

    scanf("%ld",&n);

    for(long i=1;i<=n;i++)
    {
    	scanf("%ld%ld",&a[i],&tip);
		if(!tip) a[i]*=(-1);
    }
	cycle=1;long begin=0;
    for(long i=1;i<=n;i++)
    {
    	s=s+a[i];
    	cnt++;
    	if(s>smax){
    		smax=s;
    		beginf1=begin;
    		cntf1=cnt;
    	}
    	if(s<0)
    	{
			s=0;
			cnt=0;
			begin=i+1;
    	}
		if(i==n && cycle==1)
			cycle=2,i=0;
		if(cycle==2 && i==begin-1)
			break;

    }
	if(s>smax){smax=s;beginf1=begin;}
    s=0;
	begin=0;
	cycle=1;
    for(long i=1;i<=n;i++)
		a[i]*=-1;
	cnt=0,begin=0;
	for(long i=1;i<=n;i++)
	{
		s=s+a[i];
		cnt++;
		if(s>smax2){
			smax2=s;
			beginf2=begin;
			cntf2=cnt;
		}
		if(s<0){
			s=0;
			begin=i+1;
			cnt=0;
		}
		if(i==n && cycle==1)
			cycle=2,i=0;
		if(cycle==2 && i==begin-1)
			break;
	}
	if(s>smax2)
		smax2=s;
	if(smax>smax2)
		printf("%ld %ld %ld\n",smax,beginf1,cntf1);
	else printf("%ld %ld %ld\n",smax2,beginf2,cntf2);
    return 0;
}