#include <cstdio>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1001;
const int minn = -1;
int H[maxn], Size;
//堆初始化
void Creat()
{
Size = 0;
H[0] = minn;
}
void Insert(int X)
{
int i;
//找到插入位置:当前节点父节点大于该值就继续向上走,父节点下移
for(i = ++Size; H[i / 2] > X; i /= 2) H[i] = H[i / 2];
//插入位置赋值
H[i] = X;
}
int main()
{
int n, m;
cin >> n >> m;
for(int i = 0; i < n; i++)
{
int X;
cin >> X;
Insert(X);
}
for(int i = 0; i < m; i++)
{
int Y;
cin >> Y;
cout << H[Y];
//打印父节点直到根
while(Y > 1)
{
Y /= 2;
cout <<" "<< H[Y];
}
cout << endl;
}
return 0;
}
堆的简单应用(数组实现,打印路径)
最新推荐文章于 2022-04-06 20:36:29 发布