Pagini recente » Cod sursa (job #1819998) | Cod sursa (job #70091) | Cod sursa (job #2364969) | Cod sursa (job #1748518) | Cod sursa (job #21779)
Cod sursa(job #21779)
program p1;
type tip=0..250001;
var mat:array[0..250001,0..17] of tip;
gr:array[0..250001] of tip;
c:array[0..21] of tip;
n,m,i,j,p,q,x,y:0..300001;
f,g:text;
begin
assign(f,'stramosi.in');
reset(f);
assign(g,'stramosi.out');
rewrite(g);
read(f,n,m);
for i:=1 to n do
read(f,mat[i,1]);
for i:=1 to n do
begin
j:=1;
p:=0;
repeat
j:=j+1;
x:=mat[i,j-1];
if x=0 then p:=1
else
begin
q:=mat[x,j-1];
if q=0 then p:=1
else mat[i,j]:=q;
end;
until p=1;
mat[i,0]:=1 shl (j-2);
end;
for y:=1 to m do
begin
readln(f,q,p);
x:=0;
j:=1;
i:=1;
if (i and p)=i then
begin
x:=x+1;
c[x]:=i;
gr[x]:=j;
end;
repeat
i:=i+i;
j:=j+1;
if (i and p)=i then
begin
x:=x+1;
c[x]:=i;
gr[x]:=j;
end;
until i>=p;
x:=x+1;
if mat[q,0]=0 then q:=0
else
while x>1 do
begin
x:=x-1;
if mat[q,0]<c[x] then q:=0
else q:=mat[q,gr[x]];
end;
writeln(g,q);
end;
close(f);
close(g);
end.