题目描述
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 正序输出可不是前 大——方向反了。