当前位置: 首页 > news >正文

【二分查找 树状树状】P9588 「MXOI Round 2」队列|普及+

本文涉及的基础知识点

C++二分查找
树状数组

「MXOI Round 2」队列

题目描述

小 C 有一个队列,他要对这个队列进行 qqq 次操作。操作共四种,参数分别如下:

1x1\ x1 x:这是第一种操作,表示从队尾依次插入 1,2,3,⋯,x1,2,3,\cdots,x1,2,3,,x

2y2\ y2 y:这是第二种操作,表示弹出队头的前 yyy 个元素;

3z3\ z3 z:这是第三种操作,表示查询队列中的第 zzz 个元素;

444:这是第四种操作,表示查询队列中所有元素的最大值。

你需要帮助他维护这个队列,并对于每个第三种操作和第四种操作,输出查询的答案。

输入格式

第一行两个整数 c,qc,qc,q,其中 ccc 表示测试点编号。c=0c=0c=0 表示该测试点为样例。

接下来 qqq 行,每行 1∼21 \sim 212 个整数,表示一个操作,格式见【题目描述】。

输出格式

对于每个第三种操作和第四种操作,输出一行一个整数,表示查询的答案。

样例 #1

样例输入 #1

0 9
1 5
1 3
2 2
1 4
3 6
3 8
2 4
4
3 3

样例输出 #1

3
2
4
1

提示

【样例解释 #1】

在进行第四次操作后,队列中的元素依次为 3,4,5,1,2,3,1,2,3,43,4,5,1,2,3,1,2,3,43,4,5,1,2,3,1,2,3,4

在进行第七次操作后,队列中的元素依次为 2,3,1,2,3,42,3,1,2,3,42,3,1,2,3,4

【样例 #2】

见附加文件中的 queue/queue2.inqueue/queue2.ans

该样例满足测试点 111 的限制。

【样例 #3】

见附加文件中的 queue/queue3.inqueue/queue3.ans

该样例满足测试点 444 的限制。

【样例 #4】

见附加文件中的 queue/queue4.inqueue/queue4.ans

该样例满足测试点 111111 的限制。

【样例 #5】

见附加文件中的 queue/queue5.inqueue/queue5.ans

该样例满足测试点 151515 的限制。

【样例 #6】

见附加文件中的 queue/queue6.inqueue/queue6.ans

该样例满足测试点 202020 的限制。

【数据范围】

∑x\sum xx 表示单个测试点内 xxx 之和。

对于 100%100\%100% 的数据,1≤q≤2×1051 \le q \le 2\times 10^51q2×1051≤x,y,z≤1091 \le x,y,z \le 10^91x,y,z1090≤∑x≤2×10140 \le \sum x \le 2\times10^{14}0x2×1014,保证在进行第二种操作前队列内元素个数不小于 yyy,在进行第三种操作前队列内元素个数不小于 zzz,在进行第四种操作前队列内元素个数大于 000

测试点编号q≤q \leqx≤x \lex∑x≤\sum x \lex特殊性质
1∼31\sim3135005005005005005002×1052\times10^52×105C
4∼84\sim8485000500050005000500050002×1072\times10^72×107
9∼109\sim109102×1052\times10^52×10510910^91092×10142\times10^{14}2×1014AB
11∼1211\sim1211122×1052\times10^52×10510910^91092×10142\times10^{14}2×1014B
13∼1413\sim1413142×1052\times10^52×10510910^91092×1092\times10^92×109AC
15∼1615\sim1615162×1052\times10^52×10510910^91092×1092\times10^92×109C
17∼1817\sim1817182×1052\times10^52×1055005005002×1072\times10^72×107
1919192×1052\times10^52×10510910^91092×1092\times10^92×109
2020202×1052\times10^52×10510910^91092×10142\times10^{14}2×1014

特殊性质 A:没有第二种操作。

特殊性质 B:没有第三种操作。

特殊性质 C:没有第四种操作。

二分查找 树状数组

用向量模拟队列,vque[i] 记录 第 i个操作一的x。
cur表示vque[0…cur-1]已经全部出队,vque[cur]没有全部出队。
curerase记录 vque[cur]已经删多少元素。
多键有序集合sx记录,que中的x。
树状数组treeArr[i]记录vque[i]原始数量。
long long has 记录已经出队的元素数量。
二分查找:寻找首端
检测函数:treeArr.Sum(mid) -has >= z

单元测试

vector<pair<int, int>> a;TEST_METHOD(TestMethod11){a = { {1,5},{1,3},{2,2},{1,4},{3,6},{3,8},{2,4},{4,-1},{3,3} };auto res = Solution().Ans(a);AssertEx({ 3,2,4,1 }, res);}

扩展阅读

我想对大家说的话
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
失败+反思=成功 成功+反思=成功

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

http://www.dtcms.com/a/301802.html

相关文章:

  • 7月27日打卡
  • 【0基础PS】PS工具详解--选择工具--快速选择工具
  • web刷题
  • 卸载某个软件的方法
  • ABB机器人多任务详解
  • J2EE模式---服务层模式
  • Min-Max标准化​ 和 ​Z-score标准化
  • MySQL - 索引(B+树)
  • IDEA安装Key Promoter X插件记录快捷键使用频率提高生产率
  • JavaWeb学习打卡17(监听器使用、Filter过滤器实现权限拦截案例)
  • 网络虚拟化:veth,bridge,network namespace与docker网络
  • JavaScript核心概念全解析
  • 基于CNN图像特征提取流程(简化版)
  • Python训练Day25
  • 深度学习(鱼书)day04--手写数字识别项目实战
  • RK3568 Linux驱动学习——U-Boot使用
  • Docker的docker-compose类比Spring的ApplicationContext
  • Yaffs文件系统学习
  • Mysql数据库基础(入门)
  • 智慧施工:施工流程可视化管理系统
  • 【分享】外国使馆雷电综合防护系统改造方案(一)
  • 自动出题与批改系统(数学题生成+OCR识别)
  • Vue入门到实战之第三篇【超基础】
  • 从 .NET Framework 到 .NET 8:跨平台融合史诗与生态演进全景
  • 数据科学专业的行业适配全景图
  • Unity TAA
  • 大数据工程师:职责与技能全景图 -- 从“数据搬运工”到“价值架构师”
  • 三、构建一个Agent
  • Triton IR
  • 【测试报告】思绪网(Java+Selenium+Jmeter自动化测试)