本文只提供简易模板
#include <iostream>
#include <vector>
using namespace std;
int n = 0, m = 0, size = 0;
vector<int> nums;
void down(int i){
int smallest = i;
if(2 * i <= n && nums[2 * i] < nums[smallest]) smallest = 2 * i;//大根堆就把后面的<改成>
if(2 * i + 1 <= n && nums[2 * i + 1] < nums[smallest]) smallest = 2 * i + 1;//大根堆就把后面的<改成>
if(smallest != i){
swap(nums[smallest], nums[i]);
down(smallest);
}
}
int main(){
cin >> n >> m;
nums.resize(n + 1);
for(int i = 1; i <= n; i++){
cin >> nums[i];
}
for(int i = n / 2; i >= 1; i--){
down(i);
}
for(int i = 1; i <= m; i++){
printf("%d ", nums[1]);
nums[1] = nums[n];
n--;
down(1);
}
return 0;
}