PTA——堆中的路径
将一系列给定数字插入一个初始为空的小顶堆H[]
。随后对任意给定的下标i
,打印从H[i]
到根结点的路径。
输入格式:
每组测试第1行包含2个正整数N和M(≤),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。
输出格式:
对输入中给出的每个下标i
,在一行中输出从H[i]
到根结点的路径上的数据。数字间以1个空格分隔,行末不得有多余空格。
#include<cstdio> #include<cmath> #include<set> #include<map> #include<string> #include<cstdlib> #include<iostream> #include<algorithm> #include<cstring> using namespace std; int a[10000]; int size=0; const int INF=0x3f3f3f3f; void insert(int x){ size++; int i; for(i=size;x<a[i/2];i/=2){ a[i]=a[i/2]; } a[i]=x; } int main() { int n,m; scanf("%d%d",&n,&m); size=0; a[0]=-10001; int size=0; for(int i=1;i<=n;i++) { int x; scanf("%d",&x); insert(x); } for(int i=0;i<m;i++){ int x; scanf("%d",&x); for(int j=x;j>=1;j/=2){ if(j==1) printf("%d",a[j]); else printf("%d ",a[j]); } printf("\n"); } return 0; } --------------------- 作者:Joecy999 来源:CSDN 原文:https://blog.csdn.net/yyyyz999/article/details/79851520 版权声明:本文为博主原创文章,转载请附上博文链接!