Cod sursa(job #28494)
Utilizator | Data | 7 martie 2007 21:37:58 | |
---|---|---|---|
Problema | Buline | Scor | 0 |
Compilator | fpc | Status | done |
Runda | Arhiva de probleme | Marime | 2.25 kb |
var a,b,c:array[0..400000]of integer;
n,max,i,s,l:longint;
f,g:text;
begin
assign(f,'buline.in');
reset(f);
readln(f,n);
max:=-20000;
for i:=1 to n do begin
readln(f,a[i],s);
if s=0 then begin
a[i]:=-a[i];
if a[i]+b[i-1]<0 then begin
b[i]:=0;
c[i]:=i;
if a[i]>max then max:=a[i];
end
else begin
b[i]:=a[i]+a[i-1];
c[i]:=c[i-1];
if b[i]>max then max:=b[i];
end;
end
else begin
if b[i-1]=0 then begin
b[i]:=a[i];
c[i]:=i;
if b[i]>max then max:=b[i];
end
else begin
b[i]:=a[i]+b[i-1];
c[i]:=c[i-1];
if b[i]>max then max:=b[i];
end;
end;
end;
if b[n]=0 then begin end
else begin
if (a[1]+b[n]>0)and(c[n]<>1) then begin
b[1]:=b[n]+a[1];
c[1]:=c[n];
if b[1]>max then max:=b[1];
i:=1;
while (c[i]<>c[i+1])and(a[i+1]+b[i]>0)and(i<n) do begin
i:=i+1;
c[i]:=c[i-1];
b[i]:=a[i]+b[i-1];
if b[i]>max then max:=b[i];
end;
end;
end;
assign(g,'buline.out');
rewrite(g);
s:=n+1;
for i:=1 to n do begin
if b[i]=max then if c[i]<s then begin
s:=c[i];
if s>i then l:=i+n-s+1;
end
else begin
s:=c[i];
l:=i-s+1;
end;
end;
write(g,max,' ',s,' ',l);
close(g);
end.