对顶堆
对顶堆
题目
题目描述
小明和小宝正在玩一个简单的数字游戏。小明可以选择写下一个数字,也可以问小宝第个大数是多少。因为小明写的数字太多,小宝感到头晕目眩。现在,试着帮助小宝。
现在,试着帮助小宝。
简单描述:给你一些数字,然后问第k大的数字是谁,中间会有一些新的数字加进来。
输入。
第一行输入包含两个正整数,,代表次操作,代表第大。
然后是行。如果肖明选择写一个,后面会跟着一个数字。如果肖明选择问小宝,会有一个,那么你需要输出第个大数。
输出。
输出第大的数。
样例输入
8 3
I 1
I 2
I 3
Q
I 5
Q
I 4
Q
样例输出
1
2
3
提示
当书写的数字小于k时,肖明不会问小宝第k个大数。
思路
这是明显的第k大问题,我们需要用到对顶堆
我们建一个大根堆,一个小根堆
其中一个限制它大小为k,如果一个数据大于(小于)这个堆的顶,那么存入,否则存入另一个堆
这样最后限制大小的堆的堆顶就是最终答案
代码
代码中有用的STL,[不懂得朋友看这儿](https://www.cnblogs.com/L-1115/p/17575933.html)
#include<bits/stdc++.h>
using namespace std;
priority_queue<int>q2;//大根堆
priority_queue<int,vector<int>,greater<int> >q1;//小根堆
int n,k;
int main() {
cin >> n >> k;
char x;
for(int i = 1;i <= k;i ++){
cin >> x;
int a;
cin >> a;
q1.push(a);
}
for(int i = k + 1;i <= n;i ++){
cin >> x;
if(x == 'I'){
int y;
cin >> y;
if(y > q1.top()) {
q1.pop();
q1.push(y);
}else{
q2.push(y);
}
}
if(x == 'Q'){
cout << q1.top() << endl;
}
}
return 0;
}
小编蒟蒻一个,有什么问题请大佬不惜赐教Orz
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器