Cod sursa(job #337128)

Utilizator mlazariLazari Mihai mlazari Data 2 august 2009 17:26:51
Problema Stramosi Scor 80
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.06 kb
Program Stramosi;  
var m,n : longint;  
    S : array[0..250000,0..17] of longint;  
    Intrare,Iesire : text;  
  
procedure Citeste;  
var i : longint;  
begin  
  assign(Intrare,'stramosi.in');  
  reset(Intrare);  
  readln(Intrare,n,m);  
  for i:=1 to n do read(Intrare,S[i,0]);  
end;  
  
function log2(a : longint) : integer;  
begin  
  log2:=trunc(ln(a)/ln(2));  
end;  
  
procedure Calcule;  
var i,j : longint;  
begin  
  for i:=0 to 17 do S[0,i]:=0;  
  for i:=1 to log2(n) do  
   begin  
     for j:=1 to n do S[j,i]:=S[S[j,i-1],i-1];  
   end;  
end;  
  
procedure Procesare;  
var i,Q,P : longint;  
    lg : integer;  
begin  
  assign(Iesire,'stramosi.out');  
  rewrite(Iesire);  
  for i:=1 to m do  
   begin  
     readln(Intrare,Q,P);  
     while (P>0) and (Q>0) do  
      begin  
        lg:=log2(P);  
        Q:=S[Q,lg];  
        P:=P-1 shl lg;  
      end;  
     writeln(Iesire,Q);  
   end;  
  close(Intrare);  
  close(Iesire);  
end;  
  
begin  
  Citeste;  
  Calcule;  
  Procesare;  
end.