用一个数组来存放堆,注意a[0]要设一个最小值来当哨兵,或者控制insert函数里for循环
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<queue>
using namespace std;
int a[1005];
int Size=0;
void Insert(int x)
{
if(Size == 1000)
{
return;
}
int i;
Size++;
for( i=Size; x<a[i/2] ; i=i/2)
{
a[i]= a[i/2];
}
a[i]=x;
}
inline void travel(int x)
{
int flag=0;
while(x!=0)
{
if(flag)
printf(" ");
printf("%d",a[x]);
flag++;
x=x/2;
}
printf("\n");
}
int main()
{
int n,m,x;
a[0]=-1000000;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d",&x);
Insert(x);
}
while(m--)
{
scanf("%d",&x);
travel(x);
}
}
的i的值不能等于0,不然会超时