Pagini recente » Cod sursa (job #1664932) | Cod sursa (job #694497) | Cod sursa (job #1495144) | Cod sursa (job #2024977) | Cod sursa (job #14284)
Cod sursa(job #14284)
program p1;
var mat:array[0..20,0..250001] of 0..250001;
a,b,c,v:array[0..250001] of 0..250001;
n,m,i,j,p,q,x,y:0..250001;
f,g:text;
procedure parc(vf:longint);
var k:0..250001;
begin
for k:=1 to n do
if a[k]=vf then
begin
c[k]:=c[vf]+1;
v[c[k]]:=k;
i:=1;
j:=0;
repeat
j:=j+1;
mat[j,k]:=v[c[k]-i];
i:=i+(i xor (i-1)) and i;
until c[k]-i<1;
mat[0,k]:=i div 2;
parc(k);
end;
end;
begin
assign(f,'stramosi.in');
reset(f);
assign(g,'stramosi.out');
rewrite(g);
readln(f,n,m);
x:=1;
for i:=1 to n do
begin
read(f,a[i]);
if a[i]=0 then
begin
mat[x,0]:=i;
x:=x+1;
end;
end;
for y:=1 to x-1 do
begin
c[mat[y,0]]:=1;
v[1]:=mat[y,0];
parc(mat[y,0]);
end;
readln(f);
for y:=1 to m do
begin
readln(f,q,p);
x:=0;
j:=0;
repeat
j:=j+1;
b[j]:=p mod 2;
if b[j]=1 then
begin
x:=x+1;
c[x]:=1 shl (j-1);
mat[x,0]:=j;
end;
p:=p div 2;
until p<=1;
if p=1 then
begin
j:=j+1;
b[j]:=p;
x:=x+1;
c[x]:=1 shl (j-1);
mat[x,0]:=j;
end;
x:=x+1;
if mat[0,q]=0 then q:=0
else
while x>1 do
begin
x:=x-1;
if mat[0,q]<c[x] then
begin
i:=x;
q:=0;
end
else q:=mat[mat[x,0],q];
end;
writeln(g,q);
end;
close(g);
close(f);
end.