Cod sursa(job #68127)

Utilizator radu_voroneanuVoroneanu Radu Stefan radu_voroneanu Data 26 iunie 2007 16:31:30
Problema Orase Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.52 kb
var d,l,a,b:array[1..50000] of longint;
    f,g:text;
    q,n,m,poz1,poz2:longint;
    i,j,x,poz,t,w:longint;
procedure interclaseaza(st,mij,dr:longint);
 begin
  i:=st;
  a:=d;
  b:=l;
  j:=mij+1;
  poz:=st-1;
  w:=dr;
  while (i<=mij) and (j<=dr) and (i<>j) do
   if a[i]<a[j] then begin
    inc(poz);
    d[poz]:=a[i];
    l[poz]:=b[i];
    inc(i);
   end
   else
    begin
     inc(poz);
     d[poz]:=a[j];
     l[poz]:=b[j];
     inc(j);
    end;
  for t:=i to mij do begin
   inc(poz);
   d[poz]:=a[t];
   l[poz]:=b[t];
  end;
  for t:=j to dr do begin
   inc(poz);
   d[poz]:=a[t];
   l[poz]:=b[t];
  end;
 end;
procedure mergesort(st,dr:longint);
 var mij:longint;
 begin
  if st<dr then begin
   mij:=(st+dr) shr 1;
   mergesort(st,mij);
   mergesort(mij+1,st);
   interclaseaza(st,mij,dr);
  end;
 end;
procedure citesc;
 var i:longint;
 begin
  assign(f,'orase.in'); reset(f);
  read(f,m,n);
  for i:=1 to n do
   read(f,d[i],l[i]);
  close(f);
 end;
function di(x,y:longint):longint;
 begin
  di:=abs(d[x]-d[y])+l[x]+l[y];
 end;
begin
 assign(g,'orase.out'); rewrite(g);
 citesc;
 mergesort(1,n);
 if n=1 then
  writeln(g,'0')
 else begin
  poz1:=1;
  poz2:=2;
  for q:=3 to n do
   if di(q,poz1)>di(poz2,q) then begin
        if di(q,poz1)>di(poz1,poz2) then
                poz2:=q;
   end
   else
        if di(q,poz2)>di(poz1,poz2) then begin
                poz1:=poz2;
                poz2:=q;
        end;
  writeln(g,di(poz1,poz2));
 end;
 close(g);
end.