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

题解:洛谷 P1801 黑匣子

【题目来源】

洛谷:P1801 黑匣子 - 洛谷

【题目描述】

Black Box 是一种原始的数据库。它可以储存一个整数数组,还有一个特别的变量 \(i\)。最开始的时候 Black Box 是空的.而 \(i=0\)。这个 Black Box 要处理一串命令。

命令只有两种:

  • ADD(x):把 \(x\) 元素放进 Black Box;
  • GET\(i\)\(1\),然后输出 Black Box 中第 \(i\) 小的数。

记住:第 \(i\) 小的数,就是 Black Box 里的数的按从小到大的顺序排序后的第 \(i\) 个元素。

我们来演示一下一个有11个命令的命令串。(如下表所示)

序号 操作 \(i\) 数据库 输出
1 ADD(3) \(0\) \(3\) /
2 GET \(1\) \(3\) \(3\)
3 ADD(1) \(1\) \(1,3\) /
4 GET \(2\) \(1,3\) \(3\)
5 ADD(-4) \(2\) \(-4,1,3\) /
6 ADD(2) \(2\) \(-4,1,2,3\) /
7 ADD(8) \(2\) \(-4,1,2,3,8\) /
8 ADD(-1000) \(2\) \(-1000,-4,1,2,3,8\) /
9 GET \(3\) \(-1000,-4,1,2,3,8\) \(1\)
10 GET \(4\) \(-1000,-4,1,2,3,8\) \(2\)
11 ADD(2) \(4\) \(-1000,-4,1,2,2,3,8\) /

现在要求找出对于给定的命令串的最好的处理方法。ADD 命令共有 \(m\) 个,GET 命令共有 \(n\) 个。现在用两个整数数组来表示命令串:

  1. \(a_1,a_2,\cdots,a_m\):一串将要被放进 Black Box 的元素。例如上面的例子中 \(a=[3,1,-4,2,8,-1000,2]\)
  2. \(u_1,u_2,\cdots,u_n\):表示第 \(u_i\) 个元素被放进了 Black Box 里后就出现一个 GET 命令。例如上面的例子中 \(u=[1,2,6,6]\) 。输入数据不用判错。

【输入】

第一行两个整数 \(m\)\(n\),表示元素的个数和 GET 命令的个数。

第二行共 \(m\) 个整数,从左至右第 \(i\) 个整数为 \(a_i\),用空格隔开。

第三行共 \(n\) 个整数,从左至右第 \(i\) 个整数为 \(u_i\),用空格隔开。

【输出】

输出 Black Box 根据命令串所得出的输出串,一个数字一行。

【输入样例】

7 4
3 1 -4 2 8 -1000 2
1 2 6 6

【输出样例】

3
3
1
2

【算法标签】

《洛谷 P1801 黑匣子》 #线段树# #平衡树# #堆# #NOI导刊# #O2优化#

【代码详解】

// 部分分解法
#include <bits/stdc++.h>
using namespace std;const int N = 200005;  // 数组最大容量
int n, m, a[N], b[N], top = 1;  // n: 序列长度,m: 查询次数,a: 输入序列,b: 查询位置,top: 当前查询索引
multiset<int> mt;  // 可重复有序集合,用于维护当前元素
multiset<int>::iterator it;  // 集合迭代器int main()
{cin >> n >> m;  // 读入序列长度和查询次数// 读入序列afor (int i = 1; i <= n; i++){cin >> a[i];}// 读入查询位置bfor (int i = 1; i <= m; i++){cin >> b[i];}// 遍历序列afor (int i = 1; i <= n; i++){mt.insert(a[i]);  // 将当前元素插入multiset// 检查是否有查询位置等于当前索引iwhile (b[top] == i){// 找到第top小的元素it = mt.begin();  // 从最小的元素开始for (int j = 0; j < top - 1; j++){it++;  // 移动迭代器到第top小的元素}cout << *it << endl;  // 输出第top小的元素top++;  // 处理下一个查询}}return 0;
}
// 满分解法
#include <bits/stdc++.h>
using namespace std;const int N = 200005;  // 数组最大容量
int n, m, a[N], b[N], top = 1;  // n: 序列长度,m: 查询次数,a: 输入序列,b: 查询位置,top: 当前查询索引
priority_queue<int> qd;  // 大根堆,存储当前最小的k个元素
priority_queue<int, vector<int>, greater<int> > qx;  // 小根堆,存储剩余较大的元素int main()
{cin >> n >> m;  // 读入序列长度和查询次数// 读入序列afor (int i = 1; i <= n; i++){cin >> a[i];}// 读入查询位置bfor (int i = 1; i <= m; i++){cin >> b[i];}// 遍历序列afor (int i = 1; i <= n; i++){qd.push(a[i]);  // 将当前元素加入大根堆// 检查是否有查询位置等于当前索引iwhile (b[top] == i){// 调整大根堆大小,使其恰好包含top个元素while (qd.size() > top){// 将大根堆中最大的元素移到小根堆qx.push(qd.top());qd.pop();}// 此时大根堆的堆顶就是第top小的元素cout << qd.top() << endl;// 如果小根堆不为空,从其中取回一个元素保持平衡if (!qx.empty()){qd.push(qx.top());qx.pop();}top++;  // 处理下一个查询}}return 0;
}

【运行结果】

7 4
3 1 -4 2 8 -1000 2
1 2 6 6
3
3
1
2
http://www.jsqmd.com/news/394570/

相关文章:

  • YOLO26涨点改进| AAAI 2025 | 独家首发,细节涨点改进 | 引入SADecoder尺寸感知解码器模块,了解决解码器的尺度单一性问题,识别不同尺寸目标,适用于目标检测,图像分割,图像增强
  • 直接上结论:9个AI论文网站测评!MBA毕业论文写作必备工具推荐
  • 题解:AcWing 849 Dijkstra求最短路I
  • 动态窗口算法(DWA):让机器人在迷宫中优雅前行
  • 题解:洛谷 P3378 【模板】堆
  • 生产环境用Claude Code构建AI内容创作工作流:从灵感到发布的自动化实践最佳实践与性能优化
  • 揭秘2026年航空撤离舱实力厂家,助您明智选择,靠谱的撤离舱实力厂家推荐技术领航者深度解析 - 品牌推荐师
  • 2026汽车微动开关品牌优选榜单,这些品牌值得拥有,微动开关/鼠标微动开关/小型微动开关,汽车微动开关优质厂家口碑推荐 - 品牌推荐师
  • 了解2026欧曼增压器直销厂家口碑排行,选厂不迷茫,旁通阀压力表/潍柴p10H.5增压器,增压器组件推荐排行榜单 - 品牌推荐师
  • 2026年青少年心理辅导新观察:注重口碑与专业度的机构,叛逆期教育/问题青少年/青少年厌学,青少年心理辅导中心排行 - 品牌推荐师
  • 国版“OpenClaw” 网易有道 LobsterAI宣布开源:激活Agent创新生态
  • Log4j
  • 题解:AcWing 846 树的重心
  • 自感注册权:非存在论的存在之守护
  • 2026最新!AI论文写作软件 千笔 VS 灵感ai,研究生高效写作首选!
  • 2026年2月去油去屑洗发水,这几个牌子值得一试,去屑洗发水/止痒去屑洗发水/去油去屑洗发水,去油去屑洗发水产品口碑推荐 - 品牌推荐师
  • lazarus自定义mainmenu菜单栏
  • 一文讲透|10个AI论文网站测评:MBA毕业论文写作+开题报告必备工具推荐
  • 自感注册权:非存在论的存在之守护——AI元人文对存在论僭越与技术还原主义的临界批判
  • 题解:AcWing 517 信息传递
  • 题解:AcWing 1189 刻录光盘
  • 2026年1月玉米粉碎机厂家口碑榜,这些推荐很靠谱,挤压造粒机/翻堆机/双螺杆造粒机/药材粉碎机,粉碎机实力厂家排行 - 品牌推荐师
  • 想高价回收杉德斯玛特卡?一站式平台与高效流程攻略 - 团团收购物卡回收
  • 上帝之眼_数理艺术编程_C++精灵库编程案例
  • 题解:AcWing 1164 加工零件
  • 国内开源大模型竞争加剧,技术迭代与应用落地成焦点
  • 2026隧道/机房/装饰钢板厂家推荐:无锡华龙机房新型装饰材料有限公司,多品类钢板供应 - 品牌推荐官
  • 【Redis】Ubuntu22.04安装redis++ - 实践
  • 题解:AcWing 848 有向图的拓扑序列
  • 2026盘式过滤机厂家推荐:连云港格律诗环保设备,陶瓷/真空过滤机全系供应,技术领先 - 品牌推荐官