Pagini recente » Cod sursa (job #2473275) | Cod sursa (job #2259294) | Cod sursa (job #239325) | Cod sursa (job #1229457) | Cod sursa (job #136841)
Cod sursa(job #136841)
var fi,fo:text;
n,i,s,l,p,suma,nb,cul,pozi,pozf,suma2,pozi2,pozf2:longint;
vl,poz:array[0..200000]of integer;
ss:array[0..200000]of longint;
begin
assign(fi,'buline.in'); reset(fi);
assign(fo,'buline.out'); rewrite(fo);
read(fi,n);
s:=0; suma:=0; suma2:=0;
for i:=1 to n do
begin
read(fi,nb,cul);
if cul=0 then vl[i]:=-nb
else vl[i]:=nb;
s:=s+vl[i];
end;
for i:=1 to n do
if ss[i-1]<=0 then
begin
ss[i]:=vl[i];
poz[i]:=i;
if ss[i]>suma then
begin
suma:=ss[i];
pozi:=poz[i];
pozf:=i;
end;
end
else
begin
ss[i]:=ss[i-1]+vl[i];
poz[i]:=poz[i-1];
if ss[i]>suma then
begin
suma:=ss[i];
pozi:=poz[i];
pozf:=i;
end;
end;
for i:=1 to n do
begin
vl[i]:=-vl[i];
ss[i]:=0;
end;
for i:=1 to n do
if ss[i-1]<=0 then
begin
ss[i]:=vl[i];
poz[i]:=i;
if ss[i]>suma2 then
begin
suma2:=ss[i];
pozi2:=poz[i];
pozf2:=i;
end;
end
else
begin
ss[i]:=ss[i-1]+vl[i];
poz[i]:=poz[i-1];
if ss[i]>suma2 then
begin
suma2:=ss[i];
pozi2:=poz[i];
pozf2:=i;
end;
end;
if suma>=s+suma2 then writeln(fo,suma,' ',pozi,' ',pozf-pozi+1)
else
begin
if pozi2=1 then pozi2:=n
else pozi2:=pozi2-1;
if pozf2=n then pozf2:=1
else pozf2:=pozf2+1;
writeln(fo,s+suma2,' ',pozf2,' ',n-pozf2+1+pozi2);
end;
close(fi);
close(fo);
end.