Pagini recente » Cod sursa (job #704810) | Cod sursa (job #1614298) | Cod sursa (job #3214031) | Cod sursa (job #2181632) | Cod sursa (job #430446)
Cod sursa(job #430446)
#include<stdio.h>
int x[400001], d[400001],n,i,a,b,p,u,max,q,q1;
FILE *f,*g;
int main(){
f=fopen("buline.in","r");
g=fopen("buline.out","w");
fscanf(f,"%d",&n);
for(i=1;i<=n;i++){
fscanf(f,"%d%d",&a,&b);
if(b==0)
x[i]=-a;
else
x[i]=a;
x[n+i]=x[i];
}
for(i=1;i<=2*n;i++)
x[i]=x[i-1]+x[i];
p=u=1;
d[p]=0;
for(i=1;i<=2*n;i++)
{
while(i-d[p]>n&&p<=u)
p++;
if(p<=u){
if(x[i]-x[d[p]]>max){
max=x[i]-x[d[p]];
if(i<=n){
q=d[p]+1;
q1=i;}
else{
q=2*n-i+1;
q1=i-d[p];
}
}
}
while(x[i]<=x[d[u]]&&u>=p)
u--;
u++;
d[u]=i;
}
fprintf(g,"%d %d %d",max,q,q1);
return 0;
}