Cod sursa(job #136893)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 16 februarie 2008 13:07:00
Problema Buline Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.18 kb
var fi,fo:text;
    n,i,nb,cl,pozi,suma,s,l,pp:longint;
    vl,poz:array[0..200000]of longint;
    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; ss[0]:=0;
  for i:=1 to n do
    begin
      read(fi,nb,cl);
      if cl=1 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; end
   else
     begin
       ss[i]:=ss[i-1]+vl[i]; poz[i]:=poz[i-1]; end;
   for i:=1 to n do
     if ss[i]>suma then
       begin
         suma:=ss[i]; pozi:=poz[i]; l:=i-poz[i]+1; end;
   for i:=1 to n do
     begin
       ss[i]:=0; vl[i]:=-vl[i]; end;
   for i:=1 to n do
     if ss[i-1]<=0 then
       begin
         ss[i]:=vl[i]; poz[i]:=i; end
     else
       begin
         ss[i]:=ss[i-1]+vl[i]; poz[i]:=poz[i-1]; end;
   for i:=1 to n do
     if s+ss[i]>suma then
       begin
         suma:=s+ss[i];
         if i=n then pozi:=1
                else pozi:=i+1;
         pp:=i-poz[i]+1;
         l:=n-pp;
       end;
   writeln(fo,suma,' ',pozi,' ',l);
   close(fi); close(fo);
end.