范沐垚


私信TA

用户名:dotcpp0614554

访问量:3657

签 名:

好大喜功

等  级
排  名 156
经  验 6983
参赛次数 0
文章发表 102
年  龄 18
在职情况 学生
学  校 看今夜 小楼灯宴
专  业 尽是良辰美眷

  自我简介:

沽名钓誉

解题思路:数组模拟堆排序解决

注意事项:一定要好好背模板  写得多了自然就

参考代码:

#include<iostream>
using namespace std;
const int N=10010;
int n,m,q[N],sizea;
void down(int k)
{
    int u=k;
    if(2*k<=sizea&&q[2*k]>q[u])
        u=2*k;
    if(2*k+1<=sizea&&q[2*k+1]>q[u])
        u=2*k+1;
    if(u!=k){
        swap(q[u],q[k]);
    down(u);
}}
int main(void)
{
    cin>>n>>m;
    sizea=n;
    for(int i=1;i<=n;i++)
        cin>>q[i];
    for(int i=n/2;i;i--)
        down(i);
    while(m--)
    {
        cout<<q[1]<<' ';
        q[1]=q[sizea--];
        down(1);
    }
    return 0;
}


 

0.0分

1 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区