小根堆结点的插入:
#include <iostream>
#include <algorithm>
using namespace std;
void UpAdjus(int *a,int n){
int temp=a[n],i;
// cout<<temp<<endl;
for(i=n;temp<a[i/2]&&i>1;i/=2){
a[i]=a[i/2];
}
a[i]=temp;
}
int main(){
int n,m,t;
scanf("%d %d",&n,&m);
int a[2005];
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
UpAdjus(a,i);
}
// for(int j=1;j<=n;j++){
// cout<<a[j]<<" ";
// }
// cout<<endl;
while(m--){
scanf("%d",&t);
for(int i=t;i>0;i/=2){
if(i==t)
printf("%d",a[i]);
else
printf(" %d",a[i]);
}
printf("\n");
}
return 0;
}