Pagini recente » Cod sursa (job #1215716) | Cod sursa (job #1866000) | Cod sursa (job #2510026) | Cod sursa (job #1754338) | Cod sursa (job #216526)
Cod sursa(job #216526)
#include<stdio.h>
int t[200001],inceput,lgmax,s[200001],n;
long sm,smax;
void citire(int a[200001])
{ int v;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d %d",&a[i],&v);
if(v==0)
a[i]=a[i]*(-1);
}
}
int max(int x,int y)
{
if(x>y)
return x;
else
return y;
}
void solve(int a[200001])
{
for(int i=1;i<=n;i++)
s[i]=s[i-1]+a[i];
for(int i=1;i<=n;i++)
t[i]=max(t[i-1],s[i]);
long ss;
ss=0;smax=-200001;
for(int i=1;i<=n;i++)
{
ss=t[i-1]+s[n]-s[i-1];
if(ss>smax)
{smax=ss;
inceput=i;
}
}
ss=a[inceput-1];sm=-200000;
int lg=1;
for(int i=inceput-2;i!=inceput;i--)
{
if(i==0) i=n;
if(ss<=0)
{ss=a[i];
lg=1;
}
else
{ss=ss+a[i];
lg++;
}
if(ss>sm)
{sm=ss;
lgmax=lg;
}
}
}
int main()
{
int a[200001];
freopen("buline.in","r",stdin);
freopen("buline.out","w",stdout);
citire(a);
solve(a);
printf("%ld %d %d",smax,inceput,lgmax+1);
return 0;
}