‹ 上一题 下一题 ›

g5-08227. 前 k 大 未做

1000 ms 256 MB 测试点 10 通过率 100% GESP-55级·STLpriority_queue

题目描述

priority_queue<int> 是默认的大根堆:top() 永远是当前最大值,pop() 弹掉它之后,下一个最大的会自动顶上来。先看「读入 个数全部进堆,再全部弹出输出」的完整模板程序:

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    priority_queue<int> pq;
    for (int i = 0; i < n; i++) {
        int x;
        cin >> x;
        pq.push(x);
    }
    while (!pq.empty()) {
        cout << pq.top() << " ";  // top 是当前最大
        pq.pop();                 // pop 无返回值
    }
    cout << endl;
    return 0;
}

你的任务:在模板基础上多读一个 (输入第三行),把「弹光」改成只弹出并输出 个——这恰好是全部数中前 大的数,从大到小。

输入格式

第一行一个整数 ()。

第二行 个整数 ()。

第三行一个整数 ()。

输出格式

一行 个整数:前 大,从大到小,用空格分隔。

样例

输入:

5
4 1 9 7 9
3

输出:

9 9 7

全部弹出本是 9 9 7 4 1,只弹三次就是前三个。

数据范围

,。提示:只弹 次就写成计数循环 轮,别再用 while (!pq.empty());改用 sort 正序输出可不是前 大——方向反了。

输入
输出

            
答案