• hdu 4006 求第K大的数 优先队列


    #include<stdio.h>
    #include<queue>
    #include<vector>
    #include<iostream>
    using namespace std;
    int main()
    {
        int n,m,k;
        char a;
        while(scanf("%d %d",&n,&k)!=EOF)
        {
            priority_queue<int ,vector<int>,greater<int> >q;
            while(n--)
            {
                getchar();//接收空格键??容易忽略
                scanf("%c",&a);
                if(a=='I')
                {
                    scanf("%d",&m);
                    if(q.size()<k)q.push(m);
                    else
                    {
                        if(m>q.top())
                        {
                            q.pop();
                            q.push(m);
                        }
                    }
                }
                else
                printf("%d\n",q.top());
            }
        }
    
        return 0;
    }
    

      

          优先队列,优先队列默认是按从大到小排列的priority_queue<int> q;,如果想要按从小到大排列就:priority_queue<int,vector<int>,greater<int> > q;

    这题主要就是维护一个长度为K的优先队列就行了:

    I操作:每次遇到比队列里的最小值大的话就,把队顶元素删除,把这个值添加到队列中。

    Q操作:直接输出队顶元素。

  • 相关阅读:
    MySQL
    php抽象类和接口
    php面向对象三大特征
    php面向对象
    Git
    css3属性
    数据渲染
    ajax(2)
    ajax笔记
    作用域面试题
  • 原文地址:https://www.cnblogs.com/XDJjy/p/2998744.html
Copyright © 2020-2023  润新知