Cod sursa(job #257287)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 12 februarie 2009 23:30:58
Problema Buline Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<stdio.h>
#define N 400001
int n,i,p,u,S,P,L,co[N],a[N],s[N];
void readd(),solve(),enque(int ii),deque();
int main()
{
	readd();
	solve();
	return 0;
}
void readd()
{
	freopen("buline.in","r",stdin);
	freopen("buline.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d%d",&a[i],&p);a[i]=(p)?a[i]:-a[i];
	}
}
void solve()
{
	p=1;
	for(i=1;i<=n;i++){s[i]=s[i-1]+a[i];s[i+n]=s[i];}
	for(i=1;i<=n;i++)s[i+n]+=s[n];
	for(i=1;i<n;i++)enque(i);
	for(i=1;i<=n;i++)
	{
		deque();
		enque(i+n-1);
		if(s[co[p]]-s[i-1]>S){S=s[co[p]]-s[i-1];L=co[p]-i+1;P=i;}
	}
	printf("%d %d %d",S,P,L);
}
void deque()
{
	while(co[p]<i)p++;
}
void enque(int ii)
{
	while(u>=p&&s[co[u]]<s[ii])u--;
	u++;co[u]=ii;
}