动态k小

题目:

 这道题目十分简单,只要用大根堆维护前k小的数字即可,用大根堆是因为方便输出(用小根堆需要输出堆底),前k个先单独输入,不输出(第k个除外,单独输出) ,之后k+1~n如果输入进来的数字比堆顶大,直接跳过,否则先把原堆顶弹出再推入输入进来的数字,每一次输出堆顶即可。

大根堆与小根堆及优先队列

程序:

复制代码
#include<bits/stdc++.h>
using namespace std;
long long n,k,t;
priority_queue<long long> q;
int main()
{
    ios::sync_with_stdio(false);
    cin>>n>>k;
    for(int i=1;i<=k;i++) cin>>t,q.push(t);
    printf("%d\n",q.top());
    for(long long i=k+1;i<=n;i++)//  2 1
    {
        cin>>t;
        if(t<q.top()) q.pop(),q.push(t);
        printf("%d\n",q.top());
    }
    return 0;
}
复制代码

 

posted @   王浩泽  阅读(267)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示