Cod sursa(job #201814)

Utilizator cypherMircea Grecu cypher Data 4 august 2008 10:58:36
Problema Stramosi Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 0.88 kb
program stramosi_010;
var a:array[0..300000,1..20] of longint;
	p:array[1..20] of longint;
	n,m:longint;
	
	procedure puteri;
	var i:byte; x:longint;
	begin
		x:=1;
		for i:=0 to 20 do begin
			p[i]:=x;
			x:=x shl 1;
		end;
	end;
	
	function stramos(u,v:longint):longint;
	var w:longint;
	begin
		while v>0 do begin
			w:=trunc(ln(v)/ln(2));
			u:=a[u,p[w]];
			v:=v-p[w];
		end;
		exit(u);
	end;
	
	procedure main;
	var i,j,r,l,u,v:longint;
	begin
		assign(input,'stramosi.in'); reset(input);
		assign(output,'stramosi.out'); rewrite(output);
		readln(n,m); r:=trunc(ln(n)/ln(2)); 
		for i:=1 to n do read(a[i,1]);
		for j:=2 to r do begin
			for i:=1 to n do begin
				a[i,j]:=a[a[i,j-1],j-1];
			end;
		end;
		for l:=1 to m do begin
			readln(u,v);
			writeln(stramos(u,v));
		end;
		close(output); close(input);
	end;
	
BEGIN
	puteri;
	main;
END.