Cod sursa(job #136863)

Utilizator corcoduscorcodus corcodus Data 16 februarie 2008 11:16:59
Problema Buline Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.28 kb
var fi,fo:text;
    n,i,nb,cl,pozi,pozf,suma,s,suma2,aux,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);
  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.