Pagini recente » Cod sursa (job #2678814) | Cod sursa (job #551320) | Cod sursa (job #2481433) | Cod sursa (job #1618677) | Cod sursa (job #136844)
Cod sursa(job #136844)
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
if s+suma2>suma then
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
else
begin
if pozi2=1 then pozi2:=n
else pozi2:=pozi2-1;
if pozf2=n then pozf:=1
else pozf2:=pozf2+1;
if pozf2<pozi then
writeln(fo,s+suma2,' ',pozf2,' ',n-pozf2+1+pozi2)
else writeln(fo,suma,' ',pozi,' ',pozf-pozi+1);
end;
close(fi);
close(fo);
end.