#include <stdio.h>
#include <stdlib.h>
#define MinSize -10001
typedef struct HeapNode *MinHeap;
struct HeapNode{
int *Elements;
int Size;
int Capacity;
};
MinHeap Create(int N)
{
MinHeap H=(MinHeap)malloc(sizeof(struct HeapNode));
H->Elements=(int *)malloc((N+1)*sizeof(int));
H->Size=0;
H->Elements[0]=MinSize;
H->Capacity=N;
return H;
}
void Insert(MinHeap H,int X)
{
int i=++H->Size;
for(;X<H->Elements[i/2];i/=2){
H->Elements[i]=H->Elements[i/2];
}
H->Elements[i]=X;
}
void Path(MinHeap H,int index)
{ int tag=0;
for(;index>0;index/=2){
if(tag==0){
printf("%d",H->Elements[index]);
tag=1;
}
else printf(" %d",H->Elements[index]);
}
printf("\n");
}
int main()
{
int N,M,Data,index;
scanf("%d%d",&N,&M);
MinHeap H=Create(N);
for(int i=1;i<=N;i++){
scanf("%d",&Data);
Insert(H,Data);
}
for(int j=0;j<M;j++){
scanf("%d",&index);
Path(H,index);
}
}
#include <stdio.h>
#include <stdlib.h>
#define MinSize -10006
typedef struct HeapNode *MinHeap;
struct HeapNode{
int *Elements;
int Size;
int Capacity;
};
MinHeap Create(int N)
{
MinHeap H=(MinHeap)malloc(sizeof(struct HeapNode));
H->Elements=(int *)malloc((N+1)*sizeof(int));
H->Size=0;
H->Elements[0]=MinSize;
H->Capacity=N;
return H;
}
void PercDown(MinHeap H,int i)
{
int Parent=i,Child;
int item=H->Elements[i];
for(;2*Parent<H->Size;Parent=Child){
Child=2*Parent;
if((Child!=H->Size)&&(H->Elements[Child+1]<H->Elements[Child]))
Child++;
if(item<=H->Elements[Child]) break;
H->Elements[Parent]=H->Elements[Child];
}
H->Elements[Parent]=item;
}
void BuildMinHeap(MinHeap H)
{
int i=H->Size/2;
for(;i>0;i--)
PercDown(H,i);
}
void Path(MinHeap H,int index)
{ int tag=0;
for(;index>0;index/=2){
if(tag==0){
printf("%d",H->Elements[index]);
tag=1;
}
else printf(" %d",H->Elements[index]);
}
printf("\n");
}
int main()
{
int N,M,Data,index;
scanf("%d%d",&N,&M);
MinHeap H=Create(N);
for(int i=1;i<=N;i++){
scanf("%d",&Data);
H->Elements[i]=Data;
}
H->Size=N;
BuildMinHeap(H);
for(int j=0;j<M;j++){
scanf("%d",&index);
Path(H,index);
}
}