Cod sursa(job #69062)

Utilizator mlazariLazari Mihai mlazari Data 30 iunie 2007 22:15:25
Problema Stramosi Scor 80
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.1 kb
Program Stramosi;
const patr : array[0..17] of longint=(1,2,4,8,16,32,64,128,256,512,1024,
                                  2048,4096,8192,16384,32768,65536,131072);
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-patr[lg];
      end;
     writeln(Iesire,Q);
   end;
  close(Intrare);
  close(Iesire);
end;

begin
  Citeste;
  Calcule;
  Procesare;
end.