zoukankan      html  css  js  c++  java
  • 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操作:直接输出队顶元素。

  • 相关阅读:
    java web 里的JSP 对象的简单了解
    PLSQL 语言 异常 函数 存储过程
    PLSQL语言 分支循环
    高级查询
    oracle 杂项
    sql 里面的常用函数
    java所有内容练习
    线程
    oracle基础 知识点

  • 原文地址:https://www.cnblogs.com/XDJjy/p/2998744.html
Copyright © 2011-2022 走看看