Pagini recente » Cod sursa (job #623271) | Cod sursa (job #1747935) | Cod sursa (job #616346) | Cod sursa (job #2835214) | Cod sursa (job #611888)
Cod sursa(job #611888)
#include<stdio.h>
#define INF 2000000000
#define N 200001
long n,i,a[N],b,s[N],t[N],w=-INF,x,z,l,j,k,p,r;
int main()
{freopen("buline.in","r",stdin);
freopen("buline.out","w",stdout);
scanf("%ld",&n);
t[0]=-INF;
for(i=1;i<=n;i++)
{scanf("%ld%ld",&a[i],&b);
if(!b)
a[i]=-a[i];
if(a[i]>w)
w=a[i],l=i;
a[i+n]=a[i];
s[i]=a[i]+s[i-1];
if(s[i]>t[i-1])
t[i]=s[i];
else
t[i]=t[i-1];}
for(j=1;j<=n;j++)
if(t[j-1]+s[n]-s[j-1]>w)
w=t[j-1]+s[n]-s[j-1],l=j;
for(i=1;i<2*n;i++)
{if(p>r)
p=r,l=i;
if(i<=n)
r+=a[i];
else
r+=a[i-n];
if(i-j<n&&w<r-p)
w=r-p,k=i;
if(l<=k)
j=l;}
if(w<0)
j=l=k;
for(i=l;i<n+l;i++)
{x++;
if(i>n)
z+=a[i-n];
else
z+=a[i];
if(z==w)
break;}
printf("%ld %ld %ld",w,l,x);
return 0;}