如果会建立堆的话,这应该就是个板子题了。
不会建堆的话,推荐看一下我的这篇文章,模板积累一些对自己刷题用处是很大的
【数据结构】堆的常规操作(建堆,删除,插入)
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,m,x,a[1010],pre[1010];
void upAdjust(int i)
{
if(i==1) return ;
while(i!=1)
if(a[i]<a[i/2]) {swap(a[i],a[i/2]);i/=2;}
else break;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
upAdjust(i);
}
while(m--)
{
cin>>x;
while(x>=1)
{
if(x!=1) cout<<a[x]<<" ";
else cout<<a[x]<<endl;
x/=2;
}
}
}