Cod sursa(job #592208)

Utilizator ion_calimanUAIC Ion Caliman ion_caliman Data 27 mai 2011 00:28:30
Problema Lowest Common Ancestor Scor 60
Compilator fpc Status done
Runda Arhiva educationala Marime 1.35 kb
var     a:array[1..100000,0..20] of longint;
        b:array[1..1000000000] of char;
        n,m,i,j,t,u,v,p,k:longint;
        s:string;
        f,g:text;
begin
  assign(f,'lca.in');
  assign(g,'lca.out');
  reset(f);
  rewrite(g);
  settextbuf(f,b);
  settextbuf(g,b);
  readln(f,n,m);
  a[1,0]:=0;
  i:=2;
  while not eoln(f) do
    begin
      read(f,s);
      for j:=1 to length(s) do
        if s[j]=' ' then inc(i) else a[i,0]:=a[i,0]*10 +ord(s[j]) -ord('0');
    end;

  for i:=1 to m do
    begin
      readln(f,u,v);
      while u<>v do
        if u>v then u:=a[u,0] else v:=a[v,0];
      writeln(g,v);
    end;
  {for i:=n downto 2 do
    begin
      p:=a[i,0];
      j:=1;
      k:=1;
      while p>0 do
        begin
          if j=1 shl (k-1) then
            begin
              a[i,k]:=p;
              inc(k);
            end;
          inc(j);
          p:=a[p,0];
        end;
    end;
  for i:=1 to m do
    begin
      readln(f,u,v);
      while u<>v do
        begin
          if v>u then
            begin
              p:=1;
              while a[v,p+1]>=u do inc(p);
              v:=a[v,p];
            end else
            begin
              p:=1;
              while a[u,p+1]>=v do inc(p);
              u:=a[u,p];
            end;
        end;
      writeln(g,u);
    end;}
  close(g);
end.