博客
关于我
priority_queue:优先队列
阅读量:340 次
发布时间:2019-03-04

本文共 1786 字,大约阅读时间需要 5 分钟。

优先队列的使用是一种高效的数据结构,用于管理和检索最大或最小的元素。在本文中,我们将学习如何使用优先队列来解决两个具体的问题。第一个问题涉及游戏规则,第二个问题涉及寻找大富翁。

问题一:游戏规则

在这个游戏中,Xiao Ming和Xiao Bao轮流进行操作。Xiao Ming可以选择写下一个数字或询问Xiao Bao关于“kth great number”的问题。我们的任务是根据输入的指令,处理这些操作,并在询问时输出相应的结果。

输入格式

每个测试用例的第一行给出两个整数n和k。接下来有n行,每行要么是“I”加上数字,要么是“Q”。当遇到“I”时,将数字添加到优先队列中,并且如果队列的大小超过k,就弹出队列的最小元素。对于“Q”操作,则需要输出当前队列的第k大的元素。

输出格式

对于每个询问操作,输出当前队列的第k大的元素。

示例输入

8 3I 1I 2I 3QI 5QI 4Q

示例输出

123

问题二:寻找大富翁

在乌镇,共有n个人,我们需要找出该镇上前m个大富翁。输入包含多个测试用例,每个用例首先包含两个整数n和m,接着一行给出镇上n个人的财富值。

输入格式

输入包含多组测试用例。每个用例首先包含两个整数n(0 < n ≤ 100000)和m(0 < m ≤ 10),接下来一行输入镇上n个人的财富值。n和m同时为0时表示输入结束。

输出格式

输出前m个大富翁的财产数,财产多的排前面。如果大富翁不足m个,则全部输出。

示例输入

3 12 5 -15 31 2 3 4 50 0

示例输出

55 4 3

优先队列的使用

优先队列(Priority Queue)是一种数据结构,能够高效地进行插入和提取最大或最小的元素。在C++中,优先队列的实现通常基于堆(Heap)。以下是优先队列的基本操作和特性:

  • 插入操作:在O(log n)时间复杂度内将元素插入队列。
  • 提取最大元素:在O(log n)时间复杂度内提取队列中最大的元素。
  • 比较方式:默认情况下,优先队列使用less比较方式,即队列中的元素从小到大排列。为了提取最大元素,需要将比较方式设置为greater。
  • 在处理问题一时,我们需要确保优先队列中的元素始终不超过k个,这样在处理询问操作时,队列中总有k个元素可供选择。

    代码实现

    #include 
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    using namespace std;int main() { int n, k, t; char s[5]; while (scanf("%d%d", &n, &k) != EOF) { priority_queue
    , greater
    > q; for (int i = 1; i <= n; ++i) { scanf("%s", s); if (s[0] == 'I') { scanf("%d", &t); q.push(t); if (q.size() > k) { q.pop(); } } else { printf("%d\n", q.top()); q.pop(); } } } return 0;}

    代码解释

  • 读取输入:使用scanf函数读取输入数据。首先读取n和k,然后处理接下来的n行数据。
  • 优先队列初始化:使用priority_queue<int, vector<int>, greater<int>> q初始化一个优先队列,其中元素类型为int,容器为vector<int>,比较方式为greater
    ,即最大元素优先。
  • 处理输入数据:对于每一行数据,如果是“I”,读取数字并将其添加到优先队列中。如果队列大小超过k,则弹出最小的元素。对于“Q”,则输出队列顶部的元素并弹出。
  • 处理多个测试用例:当读取到n和m同时为0时,结束循环。
  • 总结

    优先队列在处理需要快速获取最大或最小元素的场景中非常有用。通过合理设置比较方式,可以确保队列的元素顺序符合需求。在处理问题一和问题二时,优先队列能够高效地管理和检索数据,从而解决问题。

    转载地址:http://njnh.baihongyu.com/

    你可能感兴趣的文章
    Python图像处理:从内存加载jpeg
    查看>>
    python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
    查看>>
    python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
    查看>>
    python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
    查看>>
    python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
    查看>>
    Python哪个版本最稳定好用2023.10.19
    查看>>
    Python和黑客技术的渊源
    查看>>
    Python和RF编写接口自动化
    查看>>
    Python和RF编写web自动化
    查看>>
    python和js哪个难_【Python】记一次学习,Python 与 js 在实现闭包时的差异
    查看>>
    python和java哪个更值得学——来自知乎高赞回答
    查看>>
    python和c混合编程 github_在pycharm中使用git版本管理以及同步github的方法
    查看>>
    python命名空间更改_Python模块xml.etree.ElementTree自动修改xml命名空间键
    查看>>
    Python命名中尾随下划线有什么好处?
    查看>>
    Python启动脚本
    查看>>
    Python听写汇总结果
    查看>>
    python吊打Excel?屁!那是你不会用!
    查看>>
    Python合并两张图片 | 先叠透明度再合并 (附Demo)
    查看>>
    python各进制的表述与转换
    查看>>
    python各种库安装
    查看>>