Cod sursa(job #17864)

Utilizator Programmer01Mierla Laurentiu Marian Programmer01 Data 17 februarie 2007 02:49:04
Problema Stramosi Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 0.97 kb
program p1;
type tip=0..250001;
var mat:array[0..17,0..250001] of tip;
    c:array[0..21] of tip;
    b:array[0..21] of 0..1;
    i,j,q:tip;
    m,n,y,p:0..300001;
    f,g:text;
begin
assign(f,'stramosi.in');
reset(f);
assign(g,'stramosi.out');
rewrite(g);
readln(f,n,m);
for i:=1 to n do
begin
read(f,mat[1,i]);
j:=1;
p:=0;
repeat
j:=j+1;
if mat[j-1,i]=0 then p:=1
else
begin
q:=mat[j-1,mat[j-1,i]];
if q=0 then p:=1
else mat[j,i]:=q;
end;
until p=1;
mat[0,i]:=1 shl (j-2);
end;
for y:=1 to m do
begin
readln(f,q,p);
n:=0;
j:=0;
repeat
j:=j+1;
b[j]:=p mod 2;
if b[j]=1 then
begin
n:=n+1;
i:=c[n-1];
c[n]:=i+i;
mat[n,0]:=j;
end;
p:=p div 2;
until p<=1;
if p=1 then
begin
j:=j+1;
b[j]:=p;
n:=n+1;
i:=c[n-1];
c[n]:=i+i;
mat[n,0]:=j;
end;
n:=n+1;
if mat[0,q]=0 then q:=0
else
while n>1 do
begin
n:=n-1;
if mat[0,q]<c[n] then
begin
i:=n;
q:=0;
end
else q:=mat[mat[n,0],q];
end;
writeln(g,q);
end;
close(f);
close(g);
end.