POJ 3481:双端队列 ← 数组模拟

【题目来源】
http://poj.org/problem?id=3481

【题目描述】
某银行的业务处理系统原理如下。
初始时,待处理业务队列(简称为队列)为空。
接下来,系统会收到一系列的请求,请求分为以下四种:
● 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

【算法分析】
虽然本题来源于三个刷题网站:
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/

但是,下文使用
数组模拟的代码仅在 POJ 3481 上通过,而在 HDU 1908 及 AcWing 5125 上均超时。故可考虑使用 STL map 来实现,经验证,使用 STL map 实现的代码可在 POJ 3481、HDU 1908、AcWing 5125 上均通过
大家学习时,请优先使用下文中的【算法代码(STL map 1)】进行学习。若想学习切题的数组模拟法实现,请参见本文最后一个代码【算法代码(数组模拟)】。

【算法代码(
STL map 1)】

#include<iostream>
#include<map>
using namespace std;map<int,int> mp;
map<int,int>::iterator it;
int K,P;
int cnt;int main() {int op;while(~scanf("%d",&op)) {if(op==0) break;if(op==1) {scanf("%d%d",&K,&P);mp[P]=K;cnt++;}if(op==2) {if(cnt==0) printf("0\n");else {it=mp.end();it--;printf("%d\n",it->second);mp.erase(it);cnt--;}}if(op==3) {if(cnt==0) printf("0\n");else {it=mp.begin();printf("%d\n",it->second);mp.erase(it);cnt--;}}}return 0;
}/*
in:
2
1 20 14
1 30 3
2
1 10 99
3
2
2
0out:
0
20
30
10
0
*/


【算法代码(STL map 2)】

#include <iostream>
#include <map>
using namespace std;map<int,int> mp;int main() {int K,P;int op;while(~scanf("%d",&op)) {if(op==0) break;if(op==2 && mp.size()==0) {printf("0\n");continue;}if(op==3 && mp.size()==0) {printf("0\n");continue;}if(op==1) {scanf("%d%d",&K,&P);mp[P]=K;continue;}if(op==2) {printf("%d\n",(*mp.rbegin()).second);mp.erase(mp.find((*mp.rbegin()).first));} else {printf("%d\n",(*mp.begin()).second);mp.erase(mp.begin());}}return 0;
}/*
in:
2
1 20 14
1 30 3
2
1 10 99
3
2
2
0out:
0
20
30
10
0
*/


【算法代码(数组模拟)】

#include <iostream>
using namespace std;
const int N=1E7+5;
struct Queue {int K;int P;
} q[N];int hh=0;
int tt=-1;
int cnt;
int pos; //Position of inserting into the queueint a,b;
int main() {int n;while(scanf("%d",&n)!=EOF,n) {if(n==1) {scanf("%d %d",&a,&b);if(tt<hh) {q[hh].K=a;q[hh].P=b;tt=hh;} else {pos=tt+1;for(int i=hh; i<=tt; i++) {if(b<q[i].P) {pos=i;break;}}for(int j=tt; j>=pos; j--) {q[j+1].P=q[j].P;q[j+1].K=q[j].K;}q[pos].P=b;q[pos].K=a;tt++;}cnt++;} else if(n==3) {if(tt-hh>=0 && cnt) {printf("%d\n",q[hh].K);hh++;} else printf("0\n");if(cnt) cnt--;} else if(n==2) {if(tt-hh>=0 && cnt) {printf("%d\n",q[tt].K);q[tt].K=q[tt].P=0;tt--;} else printf("0\n");if(cnt) cnt--;}}return 0;
}/*
in:
2
1 20 14
1 30 3
2
1 10 99
3
2
2
0out:
0
20
30
10
0
*/




【参考文献】
https://blog.csdn.net/spark_007/article/details/8810139
https://blog.csdn.net/weixin_44226181/article/details/126758131
https://www.w3xue.com/exp/article/201811/6221.html








 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/101037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TensorFlow入门(十八、激活函数)

激活函数是什么? 单个神经元的网络模型: 用计算公式表达如下: 即在神经元中,输入的x通过与权重w相乘,与偏置量b求和后,还被作用了一个函数,这个函数就是激活函数。 激活函数的作用 如果没有激活函数,整个神经元模型就是一个简单的线性方程。而在现实生活中,线性方程能解决的事…

超简单的视频截取方法,迅速提取所需片段!

“视频可以截取吗&#xff1f;用相机拍摄了一段视频&#xff0c;但是中途相机发生了故障&#xff0c;录进去了很多不需要的片段&#xff0c;现在想截取一部分视频出来&#xff0c;但是不知道方法&#xff0c;想问问广大的网友&#xff0c;知不知道视频截取的方法。” 无论是工…

2023年中国牙线市场规模、竞争现状及行业需求前景分析[图]

牙线是由合成纤维或其他材料制成&#xff0c;或添加香料、色素、活性成分等&#xff0c;用来清洁牙齿邻面附着物的线。能够有效包裹牙齿&#xff0c;对于清洁平面/凸起牙面和牙齿邻接面的牙菌斑效果很好&#xff0c;还可以实现对于牙缝间食物/异物的剔除&#xff0c;有效清洁口…

AHK ControlClick 为啥出错?

AHK ControlClick 为啥出错&#xff1f; https://www.autohotkey.com/docs/v2/lib/ControlClick.htm#Reliability Run "C:\\new_tdx\\TdxW.exe" if WinWait("通达信金融终端V7.48", , 6){ ; WinMinimize ; Use the window found by WinWait.;MsgBox &…

linux后台运行java项目/ jar包:nohup 命令

1.提出问题 我们把一个 SpringBoot 工程导出为 jar 包&#xff0c;jar 包上传到阿里云 ECS 服务器上&#xff0c;使用 java -jar xxx-xxx.jar 命令启动这个 SpringBoot 程序。此时我们本地的 xshell 客户端必须一直开着&#xff0c;一旦 xshell 客户端关闭&#xff0c;java -j…

CPU性能分析--火焰图使用

记录工具使用说明&#xff0c;火焰图原理网上分析很多。主要用来分析函数调用栈占用的cpu利用率&#xff0c;分析函数性能。 perf安装&#xff1a; sudo apt-get install linux-tools-common sudo apt-get install linux-tools-"(uname -r)" sudo apt-get install …

java实现权重随机获取值或对象

文章目录 场景TreeMap.tailMap方法简单分析使用随机值使用treemap实现权重取值将Int改为Double稍微准确一点,因为double随机的值更加多测试main方法 当权重的参数比较多,那么建议使用hutool封装的 场景 按照权重2,8给用户分组为A,B, TreeMap.tailMap方法 treeMap是一种基于红…

基于FPGA的图像形态学腐蚀算法实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将FPGA的仿真结果导入到MATLAB,结果如下所示&#xff1a; 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 timescale 1ns / 1ps…

矩阵中幸运数(Python)

给你一个 m * n 的矩阵&#xff0c;矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。幸运数 是指矩阵中满足同时下列两个条件的元素&#xff1a;在同一行的所有元素中最小 在同一列的所有元素中最大 示例 1&#xff1a;输入&#xff1a;matrix [[3,7,8],[9,…

微服务必学!RedisSearch终极使用指南,你值得拥有!

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是尘缘&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f449;点击这里&#xff0c;就可以查看我的主页啦&#xff01;&#x1f447;&#x…

基于乌燕鸥优化的BP神经网络(分类应用) - 附代码

基于乌燕鸥优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于乌燕鸥优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.乌燕鸥优化BP神经网络3.1 BP神经网络参数设置3.2 乌燕鸥算法应用 4.测试结果&#x…

机器学习、深度学习相关的项目集合【自行选择即可】

【基于YOLOv5的瓷砖瑕疵检测系统】 YOLOv5是一种目标检测算法&#xff0c;它是YOLO&#xff08;You Only Look Once&#xff09;系列模型的进化版本。YOLOv5是由Ultralytics开发的&#xff0c;基于一阶段目标检测的概念。其目标是在保持高准确率的同时提高目标检测的速度和效率…

Python并发编程简介

1、Python对并发编程的支持 多线程: threading, 利用CPU和IO可以同时执行的原理,让CPU不会干巴巴等待IO完成多进程: multiprocessing, 利用多核CPU的能力&#xff0c;真正的并行执行任务异步IO: asyncio,在单线程利用CPU和IO同时执行的原理&#xff0c;实现函数异步执行使用Lo…

Socks5代理与代理IP技术:网络工程师的全能武器

在数字时代&#xff0c;网络工程师的角色已经变得非常多样化&#xff0c;他们需要应对诸多技术挑战&#xff0c;包括跨界电商、爬虫、出海业务、网络安全和游戏等。为了胜任这些任务&#xff0c;网络工程师如今需要掌握并充分利用Socks5代理和代理IP技术&#xff0c;这两者已经…

Altium如何查看导线长度?凡亿悄悄地告诉你

Altium Designer&#xff08;AD&#xff09;是全球应用最广泛的EDA工具之一&#xff0c;它提供了一套完整的解决方案&#xff0c;从原理图设计、模拟、PCB布局和布线&#xff0c;到最后的Gerber输出&#xff0c;都可在该平台上完成&#xff0c;因此是很多电子工程师的必学软件之…

Java学数据结构(4)——PriorityQueue(优先队列) 二叉堆(binary heap)

前言 数据结构与算法作为计算机科学的基础&#xff0c;是一个重点和难点&#xff0c;在实际编程中似乎看不它们的身影&#xff0c;但是它们有随处不在&#xff0c;如影随形。 本系列博客是《数据结构与算法分析—Java语言描述》的读书笔记&#xff0c;合集文章列表如下&#…

【开发日记】Docker搭建Maven私服

文章目录 前言1、拉取镜像2、创建本地目录3、启动容器4、访问5、上传依赖6、项目配置私服 前言 Maven私服是一种特殊的远程仓库&#xff0c;它是架设在局域网内的仓库服务&#xff0c;用来代理位于外部的远程仓库&#xff08;中央仓库、其他远程公共仓库&#xff09;。 在公司…

docker 部署 xxl-job SpringBoot 整合 xxl-job 执行任务

概述 XXL-JOB是一个轻量级的分布式任务调度平台&#xff0c;具有以下特点&#xff1a; 调度模块&#xff1a;负责管理调度信息&#xff0c;发出调度请求&#xff0c;支持可视化和动态的操作&#xff0c;监控调度结果和日志&#xff0c;支持执行器Failover 执行模块&#xff1…

【axmol-2.1 vs cocos2dx性能备忘】

axmol-2.1-08c0605 cocos2d-x-4.0 cocos2d-x-3.17.1 结论 从多边形Sprite渲染性能测试用例看&#xff0c;axmol相对于cocos2d-x-4.0提升42%, 相对于cocos2d-x-3.17.1提升30.8%

mysql面试题35:MySQL有关权限的表有哪些?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL有关权限的表有哪些? MySQL中与权限相关的表主要包括以下几个: user表:存储MySQL用户的基本信息,包括用户名、密码等。可以使用以下命令…