Pagini recente » Cod sursa (job #1200511) | Cod sursa (job #119062) | Cod sursa (job #732327) | Cod sursa (job #541466) | Cod sursa (job #108596)
Cod sursa(job #108596)
type
coloana=array [0..18]of longint;
linie=array [1..1024] of ^coloana;
mat=array [0..245]of ^linie;
var a:mat;
n,m,i,j,s,g,q,p,max:longint;
f1,f2:text;
function exponent(pas:longint):integer;
var k:longint;
begin
k:=0;
while pas>=(1 shl k) do
k:=k+1;
exponent:=k-1
end;
procedure rec(nr,exp:longint);
begin
repeat
a[i shr 10]^[i and 1023]^[exp]:=nr;
if nr<>0 then
nr:=a[nr shr 10]^[nr and 1023]^[exp];
exp:=exp+1
until exp=max+1;
end;
procedure rec2(nod,x:longint);
var e:longint;
begin
repeat
e:=exponent(x);
x:=x-(1 shl e);
nod:=a[nod shr 10]^[nod and 1023]^[e];
if nod=0 then
g:=0
else
if x=0 then
g:=nod
until (nod=0) or (x=0);
end;
begin
assign(f1,'stramosi.in');
reset(f1);
readln(f1,n,m);
max:=exponent(n);
for i:=0 to (n shr 10) do
begin
new(a[i]);
for j:=1 to 1024 do
new(a[i]^[j])
end;
i:=0;
repeat
i:=i+1;
read(f1,s);
rec(s,0)
until i=n;
assign(f2,'stramosi.out');
rewrite(f2);
i:=0;
repeat
i:=i+1;
readln(f1,q,p);
g:=0;
if p>0 then
rec2(q,p)
else
g:=q;
writeln(f2,g)
until i=m;
close(f1);
close(f2)
end.