PTA 数据结构与算法题目集(中文)5-5 堆中的路径 (25分)
2017-04-14 21:22
671 查看
#include <stdio.h>
#include <string.h>
/*
建立一个小顶堆,输出
*/
void tz(int t[],int i)
{
if(i==0)return;
if(t[(i-1)/2]<t[i])return;
else
{
int d=t[(i-1)/2];
t[(i-1)/2]=t[i];
t[i]=d;
tz(t,(i-1)/2);
}
}
void print(int t[],int x)
{
if(x==0)
{
printf("%d\n",t[x]);
return;
}
printf("%d ",t[x]);
print(t,(x-1)/2);
}
int main()
{
int t[1001],ti[1001],n,m,x;
while(~scanf("%d %d",&n,&m))
{
memset(t,100000,sizeof(t));
for(int i=0;i<n;i++)
scanf("%d",&ti[i]);
for(int i=0;i<n;i++)
{
t[i]=ti[i];
if(i)tz(t,i);
}
for(int i=0;i<m;i++)
{
scanf("%d",&x);
print(t,x-1);
}
}
return 0;
}
#include <string.h>
/*
建立一个小顶堆,输出
*/
void tz(int t[],int i)
{
if(i==0)return;
if(t[(i-1)/2]<t[i])return;
else
{
int d=t[(i-1)/2];
t[(i-1)/2]=t[i];
t[i]=d;
tz(t,(i-1)/2);
}
}
void print(int t[],int x)
{
if(x==0)
{
printf("%d\n",t[x]);
return;
}
printf("%d ",t[x]);
print(t,(x-1)/2);
}
int main()
{
int t[1001],ti[1001],n,m,x;
while(~scanf("%d %d",&n,&m))
{
memset(t,100000,sizeof(t));
for(int i=0;i<n;i++)
scanf("%d",&ti[i]);
for(int i=0;i<n;i++)
{
t[i]=ti[i];
if(i)tz(t,i);
}
for(int i=0;i<m;i++)
{
scanf("%d",&x);
print(t,x-1);
}
}
return 0;
}
相关文章推荐
- PTA 数据结构与算法题目集(中文)5-4 是否同一棵二叉搜索树 (25分)
- PTA 数据结构与算法题目集(中文)5-9 旅游规划 (25分)
- PTA 数据结构与算法题目集(中文)5-8 哈利·波特的考试 (25分)
- pta-数据结构与算法题目集(中文)-4-1-单链表逆转
- PTA 数据结构与算法题目集(中文)6-9
- PTA 数据结构与算法题目集(中文)6-5
- PTA 数据结构与算法题目集(中文)6-11
- pta-数据结构与算法题目集(中文)--4-4 链式表的按序号查找
- PTA 数据结构与算法题目集(中文)5-7 六度空间 (30分)
- pta-数据结构与算法题目集(中文)-4-3 求链式表的表长
- pta-数据结构与算法题目集(中文)-4-2 顺序表操作集
- PTA 数据结构与算法题目集(中文)6-6
- 数据结构与算法题目集(中文)——5-53 两个有序序列的中位数 (25分)——链表
- PTA 数据结构与算法题目集(中文)6-10
- PTA 数据结构与算法题目集(中文)6-2
- PTA 数据结构与算法题目集(中文)6-1
- PTA 数据结构与算法题目集(中文)5-11 关键活动 (30分)
- PTA 数据结构题目(1):最大子列和问题(分而治之、在线处理算法)
- 数据结构与算法题目集(中文)4-10 二分查找 (20分)
- 数据结构与算法题目集(中文)4-11 先序输出叶结点 (15分)