使用堆得自动排序功能,维护一个大小为k的最大堆。
最终输出k个数即为最小k个数。
如果是求最大k个数,那么就使用最小堆。

#include<bits/stdc++.h>

using namespace std;

int main()
{
    int m, k;
    for (; cin >> m >> k;) {
        vector<int> nums;
        for (; m--;) {
            int x;
            cin >> x;
            nums.push_back(x);
        }

        priority_queue<int> mxheap;
        for (int i = 0; i < nums.size(); i++) {
            mxheap.push(nums[i]);
            for (; mxheap.size() > k; )
                mxheap.pop();
        }

        vector<int> res;
        for (; mxheap.size(); mxheap.pop()) 
            res.push_back(mxheap.top());

        for (int i = res.size() - 1; i >=0; i--) 
            cout << res[i] << ' ';
        cout << endl;
    }
    return 0;
}