码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • POJ 3481、HDU 1908、AcWing 5125:双端队列 ← STL map


    【题目来源】
    本题来源于三个刷题网站:
    POJ 3481:http://poj.org/problem?id=3481
    HDU 1908:http://acm.hdu.edu.cn/showproblem.php?pid=1908
    AcWing 5125:https://www.acwing.com/problem/content/5128/


    【题目描述】
    某银行的业务处理系统原理如下。
    初始时,待处理业务队列(简称为队列)为空。
    接下来,系统会收到一系列的请求,请求分为以下四种:
    ● 0,表示系统需要停止服务。
    ● 1 K P,表示收到一个来自客户 K 的优先级为 P 的待处理业务,并将该业务加入队列。
    ● 2,表示处理当前队列中优先级最高的待处理业务,并将该业务从队列中删除。
    ● 3,表示处理当前队列中优先级最低的待处理业务,并将该业务从队列中删除。
    保证在任何时候,当前队列中的现有待处理业务都满足:不会有多个待处理业务来自同一客户,也不会有多个待处理业务优先级相同。
    也就是说,在完成某客户的待处理业务之前,不会再次收到该客户的待处理业务;在完成某优先级的待处理业务之前,不会再次收到该优先级的待处理业务。
    给定银行系统收到的所有请求,请你模拟系统处理过程。

    【输入格式】
    输入若干行,每行包含一个请求,格式如题面描述。
    数据保证有且仅有最后一行包含请求 0。

    【输出格式】
    对于每个请求 2 和 3,输出一行结果,一个整数,表示此次请求处理业务的客户编号。如果没有可处理业务,则输出 0。

    【数据范围】
    输入最多包含 10^6 个请求。
    1≤K≤10^6,
    1≤P≤10^7。

    【输入样例】
    2
    1 20 14
    1 30 3
    2
    1 10 99
    3
    2
    2
    0

    【输出样例】

    0
    20
    30
    10
    0

    【算法分析】
    本文使用到
    STL map,详见:https://cplusplus.com/reference/map/map/

    【算法代码1】

    1. #include
    2. #include
    3. using namespace std;
    4. map<int,int> mp;
    5. map<int,int>::iterator it;
    6. int K,P;
    7. int cnt;
    8. int main() {
    9. int op;
    10. while(~scanf("%d",&op)) {
    11. if(op==0) break;
    12. if(op==1) {
    13. scanf("%d%d",&K,&P);
    14. mp[P]=K;
    15. cnt++;
    16. }
    17. if(op==2) {
    18. if(cnt==0) printf("0\n");
    19. else {
    20. it=mp.end();
    21. it--;
    22. printf("%d\n",it->second);
    23. mp.erase(it);
    24. cnt--;
    25. }
    26. }
    27. if(op==3) {
    28. if(cnt==0) printf("0\n");
    29. else {
    30. it=mp.begin();
    31. printf("%d\n",it->second);
    32. mp.erase(it);
    33. cnt--;
    34. }
    35. }
    36. }
    37. return 0;
    38. }
    39. /*
    40. in:
    41. 2
    42. 1 20 14
    43. 1 30 3
    44. 2
    45. 1 10 99
    46. 3
    47. 2
    48. 2
    49. 0
    50. out:
    51. 0
    52. 20
    53. 30
    54. 10
    55. 0
    56. */


    【算法代码2】

    1. #include
    2. #include
    3. using namespace std;
    4. map<int,int> mp;
    5. int main() {
    6. int K,P;
    7. int op;
    8. while(~scanf("%d",&op)) {
    9. if(op==0) break;
    10. if(op==2 && mp.size()==0) {
    11. printf("0\n");
    12. continue;
    13. }
    14. if(op==3 && mp.size()==0) {
    15. printf("0\n");
    16. continue;
    17. }
    18. if(op==1) {
    19. scanf("%d%d",&K,&P);
    20. mp[P]=K;
    21. continue;
    22. }
    23. if(op==2) {
    24. printf("%d\n",(*mp.rbegin()).second);
    25. mp.erase(mp.find((*mp.rbegin()).first));
    26. } else {
    27. printf("%d\n",(*mp.begin()).second);
    28. mp.erase(mp.begin());
    29. }
    30. }
    31. return 0;
    32. }
    33. /*
    34. in:
    35. 2
    36. 1 20 14
    37. 1 30 3
    38. 2
    39. 1 10 99
    40. 3
    41. 2
    42. 2
    43. 0
    44. out:
    45. 0
    46. 20
    47. 30
    48. 10
    49. 0
    50. */




    【参考文献】
    https://blog.csdn.net/coding_sun/article/details/77248892
    http://phpzyw.com/bcddeBGwCBVVRBQM.html






     

  • 相关阅读:
    2023系统分析师---论需求分析方法及应用(内部消息)
    每天一道算法题——动态规划
    2022-08-18 JDBC
    JS 原型和原型链
    阿里p8大佬手写web自动化测试框架教程 涵盖框架源码+视频教程以及搭建流程
    企业私域增长难题该如何破解?推荐快鲸scrm系统
    数组,数组方法及排序算法(冒泡排序,选择排序,快速排序)
    vue获取外网IP、java后端及nginx多次转发获取真实IP
    《自卑与超越》生活对你应有的意义
    教培机构如何抢占招生市场
  • 原文地址:https://blog.csdn.net/hnjzsyjyj/article/details/133697525
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号