• 【HDU No. 4006】 第k 大的数 The kth great number


    【HDU No. 4006】 第k 大的数 The kth great number

    杭电OJ 题目地址

    在这里插入图片描述

    【题意】

    小明和小宝正在玩数字游戏。游戏有n轮,小明在每轮中都可以写一个数,或者问小宝第k 大的数是什么(第k 大的数指有k -1个数比它大)。

    游戏格式为:

    • I c ,表示小明写下一个数c ;
    • Q,表示小明问第k 大的数。

    请对小明的每个询问都给出第k 大的数。

    【输入输出】

    输入:

    输入包含多个测试用例。每个测试用例的第1行都包含两个正整数n 、k (1≤k ≤n ≤1000000),表示n 轮游戏和第k 大的数。然后是n 行,格式为I c 或Q。

    输出:

    对每个询问Q,都单行输出第k 大的数。

    【样例】

    在这里插入图片描述

    提示: 当写下的数字个数小于k 个时,小明不会问小宝第k 大的数。

    【思路分析】

    这道题数据范围很大,直接暴力肯定超时,因此可以借助优先队列实现。

    【算法设计】

    ① 使用优先队列(最小值优先)存储最大的k 个数。

    ② 插入。若队中元素个数小于k ,则直接入队;若当前输入元素大于队头,则队头出队,当前元素入队。

    ③ 查询。队头(堆顶)就是第k 大的数,输出即可。

    【举个栗子】

    根据输入样例,操作过程如下。

    ① 插入。I 1:元素个数小于3,直接入队。I 2:元素个数小于3,直接入队。I 3:元素个数小于3,直接入队。

    在这里插入图片描述

    ② 查询。查询第3大的数,队头1为第3大的数。数字3是第1大。

    ③ 插入。I 5:元素个数不小于3,5比队头大,则队头出队,5入队。

    在这里插入图片描述

    ④ 查询。查询第3大的数,队头2为第3大的数。

    ⑤ 插入。I 4:元素个数不小于3,4比队头大,则队头出队,4入队。

    在这里插入图片描述

    ⑥ 查询。查询第3大的数,队头3为第3大的数。

    【算法实现】

    #include
    #include
    #include//提供比较函数greater 
    #include
    
    using namespace std;
    
    int main(){
    	
        int i,n,k,num;
        char c;
        priority_queue<int,vector<int>,greater<int> >q;//小顶堆 
        while(~scanf("%d%d",&n,&k)){
            while(q.size())//初始化队列为空 
    			q.pop();             
            for(i=1;i<=n;i++){
    	        cin>>c;
    	        if(c=='I'){
    	            scanf("%d",&num);
    	            if(q.size()<k) //堆中元素个数小于k
    	            	q.push(num);
    	            else if(q.top()<num) //当堆顶小于输入元素时
    	            	q.pop(),q.push(num);//堆顶出队,元素入队
    	        }                        //堆中永远保存最大的k个元素 
    	        else
    	        	printf("%d\n",q.top()); //堆顶即为第k大元素
            }
        }
        
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    在这里插入图片描述

  • 相关阅读:
    下载、安装CAN-EYE植被参数工具
    web前端-javascript-数据类型(6种数据类型/字符串、数值、布尔值、空值、未定义、对象,String字符串、引号问题、转义字符、字面量和变量输出)
    .NET Emit 入门教程:第四部分:构建类型(Type)
    jenkins基础使用
    嵌入式-vim编辑器 gcc编译器
    代码随想录 动态规划 判断子序列,不同的子序列
    2023.11.15 关于 Spring Boot 配置文件
    第三十五章 在 Windows 上使用 IRIS(二)
    剑指 Offer 24. 反转链表
    综合实训-------成绩管理系统 V1.1
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/127933827