5-5 堆中的路径 (25分)

#include <iostream>

using namespace std;

int num[1010];

void adjustup(int k)
{
	num[0] = num[k];

	int i = k / 2;
	while(i > 0 && num[0] < num[i])
	{
		num[k] = num[i];
		k = i;
		i /= 2;
	}

	num[k] = num[0];
}

void print(int index)
{
	int first = 1;
	while(index >= 1)
	{
		if(first == 1)
		{
			first = 0;
		}
		else
		{
			printf(" ");
		}

		printf("%d", num[index]);
		index /= 2;
	}

	printf("\n");
}

int main()
{
	int n, m;
	scanf("%d%d", &n, &m);

	int i;
	for(i = 1; i <= n; i++)
	{
		scanf("%d", &num[i]);
		adjustup(i);
	}

	int index;
	for(i = 1; i <= m; i++)
	{
		scanf("%d", &index);
		print(index);
	}

	system("pause");
	return 0;
}

 

posted on 2025-11-29 14:57  王景迁  阅读(0)  评论(0)    收藏  举报

导航