Pagini recente » Cod sursa (job #2770610) | Cod sursa (job #1272049) | Cod sursa (job #2827867) | Cod sursa (job #2147921) | Cod sursa (job #2157847)
#include<cstdio>
int v[400005],st[400005];
int main(){
freopen("buline.in","r",stdin);
freopen("buline.out","w",stdout);
int n,i,minim=-2000000001,p,l,sz,le,tip;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d%d",&v[i],&tip);
if (tip==0)
v[i]=-v[i];
v[n+i]=v[i];}
n=2*n;
for(i=1;i<=n;i++)
v[i]=v[i-1]+v[i];
sz=1;
le=1;
st[1]=0;
for(i=1;i<=n;i++){
if (st[le]==i-n/2-1 && le<=sz)
le++;
if (minim==v[i]-v[st[le]]){
if (p==st[le]+1)
if (i-st[le]<l)
l=i-st[le];
if (st[le]+1<p)
p=st[le]+1,l=i-st[le];}
if (v[i]-v[st[le]]>minim)
minim=v[i]-v[st[le]],p=st[le]+1,l=i-st[le];
while(sz>=le && v[i]<v[st[sz]])
sz--;
st[++sz]=i;}
printf("%d %d %d\n",minim,p,l);
return 0;}