#include<iostream>
using namespace std;
void PrintPath(int a[],int xb);
void Creat_heapmin(int a[],int n);
void Creat_heapmin2(int a[],int n,int b[]);
int a[10010],b[10010];
int main()
{
int n,m,xb;
cin>>n>>m;
for(int i=1;i<=n;++i) cin>>a[i];
//Creat_heapmin(a,n);
Creat_heapmin2(a,n,b);
for(int i=0;i<m;++i) {
cin>>xb;
PrintPath(b,xb);
}
return 0;
}
void PrintPath(int a[],int xb)
{
int fl=0;
while(xb>=1) {
if(fl==0) {printf("%d",a[xb]);fl=1;}
else printf(" %d",a[xb]);
xb/=2;
}
printf("\n");
}
void Creat_heapmin(int a[],int n)
{
int Parent,child;
for(int i=n/2;i>=1;--i) {
for(Parent=i;Parent*2<=n;Parent*=2){
child=Parent*2;
if(child+1<=n && a[child+1]<a[child]) child++;
if(a[Parent]>a[child]) {
int temp=a[child];a[child]=a[Parent];a[Parent]=temp;
}
else break;
}
}
}
void Creat_heapmin2(int a[],int n,int b[])
{
for(int i=1;i<=n;i++) {
b[i]=a[i];
int Parent,child;
for(child=i;child>1;child/=2)
{
Parent=child/2;
if(b[Parent]>b[child]) {
int temp=b[Parent];
b[Parent]=b[child];
b[child]=temp;
}
}
}
}
PAT堆中的路径
最新推荐文章于 2024-09-21 14:48:47 发布