PAT 堆中的路径 (25分)

来源:互联网 发布:北京网络编程招聘 编辑:程序博客网 时间:2024/05/14 21:55
2-3 堆中的路径   (25分)

将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。

输入格式:

每组测试第1行包含2个正整数NNMM(\le 10001000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的NN个要被插入一个初始为空的小顶堆的整数。最后一行给出MM个下标。

输出格式:

对输入中给出的每个下标i,在一行中输出从H[i]到根结点的路径上的数据。数字间以1个空格分隔,行末不得有多余空格。

输入样例:

5 346 23 26 24 105 4 3

输出样例:

24 23 1046 23 1026 10


#include <cstdio>#include <cstdlib>#define MAX 1001#define MINH -10001int H[MAX],size;void  Create() { //建立空堆    size = 0;    H[0] = MINH;    //设置哨兵}void insert(int X) { //把X放于最后逐个与它的父节点进行比较,很巧妙!    int i;    for(i = ++size; H[i/2] > X; i /= 2)        H[i] = H[i/2];    H[i] = X;}int main() {    int N, M, temp, j;    scanf("%d%d", &N, &M);    Create();    for(int i = 0; i < N; i++) {        scanf("%d", &temp);        insert(temp);    }    for(int i = 0; i < M; i++) {        scanf("%d", &j);        printf("%d", H[j]);        while(j > 1) {              //每次坐标除以2得到它的父节点,并输出就是路径            j /= 2;            printf(" %d", H[j]);        }        printf("\n");    }    return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孕后期呼吸困难怎么办 老年憋气喘不动怎么办 老人气喘呼吸困难怎么办 开车在路上尿急怎么办 开车高速公路上尿急怎么办 云南僰银发黑怎么办 日本住民宿退房后行李怎么办 去俄罗斯喝热水怎么办 朋友被绑架了怎么办 退税单带回国怎么办 机场忘了退税怎么办 农村房子没人住怎么办 无线 换个地方怎么办 航班取消了行李怎么办 转机十几个小时怎么办 艺龙不可取消怎么办 艺龙取消不了怎么办 梦幻谷没身份证怎么办 去泰国说英语怎么办 领完机票后怎么办 顶楼夏天特别热怎么办 签证的资产证明怎么办 去台湾财力证明怎么办 吃了蜂蜜拉肚子怎么办 感冒前期嗓子疼怎么办 有点感冒嗓子疼怎么办 感冒初期鼻咽痛怎么办 孕妇鼻子有黑头怎么办 羊皮袄洗了变硬怎么办 9岁儿童上吐下泻怎么办 小儿受凉后呕吐怎么办 去丽江没人拍照怎么办 洗完澡胳膊起皮怎么办 下高原反应头疼怎么办 去泸沽湖耍不会骑自行车怎么办 布尔线乱了怎么办 希腊移民五年后怎么办 支付宝提现不到帐怎么办 验证短信收不到怎么办 美国东西部时差怎么办 在西安怎么办韩国签证