题目链接:https://pintia.cn/problem-sets/15/problems/713
题目大意:将一系列给定数字插入一个初始为空的小顶堆H[]
。随后对任意给定的下标i
,打印从H[i]
到根结点的路径
具体思路:递归建堆?zmnb。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 # define ll long long 4 const int maxn = 2e5+10; 5 int a[maxn]; 6 int flag; 7 void build(int t){ 8 if(t==1) 9 return ; 10 int tmp=t/2; 11 if(a[tmp]>a[t])swap(a[tmp],a[t]); 12 build(t/2); 13 } 14 void print(int t){ 15 if(t==1){ 16 if(!flag){ 17 printf("%d",a[t]); 18 flag=1; 19 } 20 else printf(" %d",a[t]); 21 return ; 22 } 23 if(!flag) 24 printf("%d",a[t]),flag=1; 25 else printf(" %d",a[t]); 26 print(t/2); 27 } 28 int main(){ 29 int n,m; 30 scanf("%d %d",&n,&m); 31 for(int i=1;i<=n;i++){ 32 scanf("%d",&a[i]); 33 build(i); 34 } 35 while(m--){ 36 flag=0; 37 int t; 38 scanf("%d",&t); 39 print(t); 40 printf("\n"); 41 } 42 return 0; 43 }
原文:https://www.cnblogs.com/letlifestop/p/10544374.html