Acwing 838 堆排序

Acwing 838 堆排序

#include <iostream>
#include <cstdio>
using namespace std;
int m,n;
#define MAXN 100010
int a[MAXN];
int size;

void down(int u){
    int t = u;
    if(u*2<=size && a[u*2]<a[t]) t = u*2;
    if(u*2+1<=size && a[u*2+1]<a[t]) t = u*2+1;
    if(u!=t){
        swap(a[u],a[t]);
        down(t);
    }
}


int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    size = n;
    for(int i=n/2;i;i--){
        down(i);
    }
    while(m--){
        printf("%d ",a[1]);
        a[1] = a[size];
        size--;
        down(1);
    }


    return 0;
}
全部评论

相关推荐

迷茫的大四🐶:💐孝子启动失败,改为启动咏鹅
点赞 评论 收藏
分享
牛客48826091...:哥们胸肌挺好看
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务