Cod sursa(job #26751)

Utilizator georgianaGane Andreea georgiana Data 5 martie 2007 21:00:02
Problema Buline Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.46 kb
var n,st,sum,i,smin,stmin,lgmin,c: longint;
    v,s,mm,poz: array[0..200000] of longint;

begin
   assign(input,'buline.in'); reset(input);
   read(n);
   s[0]:=0; mm[0]:=-2000000001;
   for i:=1 to n do
       begin
          read(v[i],c);
          if c=0 then v[i]:=-v[i];
          s[i]:=s[i-1]+v[i];
          mm[i]:=mm[i-1];
          poz[i]:=poz[i-1];
          if (mm[i]<s[i]) then
             begin
                mm[i]:=s[i];
                poz[i]:=i;
             end;
       end;

   sum:=v[1];
   st:=1;
   smin:=sum;
   stmin:=1;
   lgmin:=1;
   for i:=2 to n do
      begin
         if (i-st+1>n) then
           repeat
              sum:=sum-v[st];
              st:=st+1;
           until (sum>0) and (st<i-1);
         if sum>=0 then sum:=sum+v[i]
         else begin
                 sum:=v[i];
                 st:=i;
              end;
         if (sum>smin) then
            begin
               smin:=sum; stmin:=st; lgmin:=i-st+1;
            end;
      end;

   for i:=2 to n do
      begin
         sum:=s[n]-s[i-1]+mm[i-1];
         if (sum>smin) or
            ((sum=smin) and (i<stmin)) or
            ((sum=smin) and (i=stmin) and (lgmin<n+1-i+poz[i-1])) then
            begin
               smin:=sum;
               stmin:=i;
               lgmin:=n+1-i+poz[i-1];
            end;
      end;
   assign(output,'buline.out'); rewrite(output);
   writeln(smin,' ',stmin,' ',lgmin);
   close(output);
end.