【题解】洛谷P1801 黑匣子(堆)

题解:洛谷 P1801 黑匣子 等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。Black Box 是一种原始的数据库。小的数,就是 Black Box 里的数的按从小到大的顺序排序后的第。输出 Black Box 根据命令串所得出的输出串,一个数字一行。我们来演示一下一个有11个命令的命令串。最开始的时候 Black Box 是空的.而。现在要求找出对于给定的命令串的最好的处理方法。 阅读详情

怎么求一个堆内的第k小的值呢?我们可以把问题化为两个堆来解决。

存一个大根堆一个小根堆,小根堆负责读入元素。a数组记录要读的元素,b数组记录当前位置。读入当前的范围内饱含的元素,并把这个元素放到小根堆里,如果大根堆非空(注意!!!)并且大根堆堆顶比小根堆堆顶要大就交换堆顶,最后输出小根堆堆顶,把它堆顶扔到大根堆里,代表已经找到了第i小的数。关于大根堆里的数是否能更新小根堆上面已经操作过了。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
int m,n;
int a[200010];
priority_queue<int,vector<int>,greater<int> > q;
priority_queue<int,vector<int>,less<int> > p;
int main()
{
	scanf("%d%d",&m,&n);
	for(int i=1;i<=m;i++)
	{
		scanf("%d",&a[i]);
	}
	int cnt=0;
	int w;
	for(int i=1;i<=n;i++)
	{
		
		scanf("%d",&w);
		while(cnt<w)
		{
			++cnt;
			q.push(a[cnt]);
			if(!p.empty()&&p.top()>a[cnt])
			{
				q.push(p.top());
				p.pop();
				p.push(a[cnt]);
				q.pop();
			}
		}
		
		printf("%d\n",q.top());
		p.push(q.top());
		q.pop();
		
	}
	return 0;
}

 

洛谷P1015回文数C++解 洛谷题目P1015回文数题解, 立即下载

相关推荐

洛谷1-1的三道题目

洛谷的1-1,可供大家参考学习,感谢大家的支持!!!!!

P1015 [NOIP1999 普及组] 回文数

写一个程序,给定一个 N(2≤N≤10 或 N=16)进制数 M(100 位之内),求最少经过几步可以得到回文数。如果在 30 步以内(包含 30 步)不可能得到回文数,则输出。例如:给定一个十进制数 56,将 56 加 65(即把 56 从右向左读),得到 121 是一个回文数。在这里的一步是指进行了一次 N 进制的加法,上例最少用了 4 步得到回文数 4884。若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。如果能在 30 步以内得到回文数,输出格式形如。

2301_80979254的博客 667

服务器被黑?快速检测和识别系统中的恶意进程

在管理服务器时,检测和识别系统中的恶意进程至关重要。本文介绍了使用 `ps`、`top`、`htop` 等系统监控工具,分析日志文件,以及使用 `chkrootkit` 和 `rkhunter` 等安全工具的方法。通过这些步骤,可以有效地检测和处理恶意进程,确保系统的安全和稳定。

_midnight的博客 1416

P1015 回文数

题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。 例如:给定一个十进制数5656,将5656加6565(即把5656从右向左读),得到121121是一个回文数。 又如:对于十进制数8787: STEP1:8787+7878=165165 STEP2:165165+561561=726726 STEP3:726726+627627=13531...

weixin_41791402的博客 400

手把手教你用Verilog实现AT24C64的I2C读写(附完整仿真流程)

本文详细介绍了如何使用Verilog HDL设计AT24C64 EEPROM的I2C控制器,并配合ModelSim完成完整的仿真验证流程。内容涵盖I2C协议解析、Verilog状态机设计、AT24C64读写操作实现,以及仿真波形分析和调试技巧,为FPGA开发者提供了一套完整的EEPROM控制解决方案。

3c4x5z6v7b的博客 846

SAP SD科目确定:从配置到凭证的财务集成核心

本文深入解析SAP SD科目确定的核心价值与配置实践,涵盖从主数据准备到财务凭证生成的全流程。通过六步配置法和KOFI00过程拆解,帮助企业实现销售与财务模块的高效集成,确保收入、成本等数据准确归集至对应会计科目,提升财务自动化水平与数据准确性。

weixin_33491377的博客 251

题解【黑匣子_NOI导刊2010提高(06)】(洛谷P1801)

题目大意 给出一个长度为\(M\)序列\(A\),表示第\(i\)回合将\(A_i\)放入一个箱子中(共有\(M\)回合),再给出一个长度为\(N\)序列\(B\),表示在\(B_i\)回合执行一次\(Get\)操作。\(Get\)操作:\(k++\),然后输出箱子中第\(k\)大的元素;\(k\)初始为\(0\)。 分析一下 啊箱子就是堆啦 假设正在进行第\(B_i\)回合,就是...

avwpx9954的博客 252

告别环境依赖!用PyInstaller把PaddleOCR项目打包成独立EXE(附完整spec文件配置)

本文详细介绍了如何使用PyInstaller将PaddleOCR项目打包成独立EXE文件,彻底解决Python环境依赖问题。通过完整的spec文件配置和实战技巧,开发者可以轻松创建开箱即用的OCR工具,特别适合需要交付给非技术用户的场景。文章涵盖环境配置、模型打包、性能优化等关键环节,并提供了解决常见问题的方案。

weixin_33712987的博客 573

洛谷 P1801 黑匣子 题解

题面 离线处理;大体思路就是将数组排序,然后对于第k次询问把不可行的数打上标记,然后从头开始寻找第k个没打标记的点的值(排序后的数组保证了它是第k小的)。实现方法:首先离散化原始数组,得到数组find[],find[i]=j表示原位置为i的数从小到大排序后的位置是j。a[]数组表示原数组,b[]数组存每次询问到第几个位置。n个数,m个询问。由于询问的b[]是递增的,所以仅仅需要排序1~...

weixin_30437481的博客 195

S7-1500——(一)西门子PLC编程算法及程序设计1、拆解基本算法(一)

顺序队列也是一种操作受限的线性表,在一端添加数据,另一端取出数据,符合先进先出的特性工作过程:需要两个指针来指向存取元素的位置(头指针,尾指针)如下图头指针指向队列里边第一个元素位置(即下次出队元素所在的位置)尾指针是指向队列内最后一个元素的下一个位置(即下次要入队的元素要存放的位置)空队状态:最初始状态,队列没有任何元素,头指针和尾指针都指向队头,(由于没有任何元素,不能做出队操作,可进行入队操作)入队操作出队操作满队:一直入队,最终元素装满队列;满队后,虽然队列前面还有空间,但由于。

大小曲奇的博客 1605

《QGIS快速入门与应用基础》161:面要素顶点编辑与形状调整

本文系统讲解了QGIS中面要素顶点编辑与形状调整的核心操作。首先明确了顶点编辑的适用场景与核心概念,强调需满足图层类型、编辑模式、要素选择等六大前提。详细介绍了编辑顶点工具(F2键)的激活路径及配套辅助工具,通过耕地地块修正案例,分步骤演示顶点移动、添加(双击/工具栏)、删除(Delete键)三大基础操作。同时提供捕捉工具开启、画布缩放等实用技巧,帮助用户高效完成面要素的精细化调整,解决实际工作中的形状偏差问题。全文图文结合,步骤清晰,适合GIS新手快速掌握面要素编辑的核心技能。

LuckyHanMo的博客 480

洛谷 P1801 黑匣子 对顶堆

洛谷 P1801 黑匣子 对顶堆 题解: 用两个堆来维护,一个小根堆,一个大根堆。 对顶堆:可以动态维护第k大的值(比如中位数),每次操作logn 如果说上面是个小根堆,下面是个大根堆,小根堆的元素都大于大根堆的元素,那么我们可以发现:每一层节点从上往下逐层递减 (1)我们保证大根堆一直有i-1个元素,这样小根堆的堆顶就是第i大的元素。 (2)我们首先依次向大根堆中添加元素,若达到了i个,就把大...

化身孤岛的鲸o的博客 603

计算机组成原理(第三版)唐朔飞-第十章控制单元的设计-课后习题

计算机组成原理(第三版)唐朔飞-第十章控制单元的设计-课后习题

weixin_45735391的博客 3万+

洛谷 P1801 黑匣子_NOI导刊2010提高(06)

洛谷 P1801 黑匣子_NOI导刊2010提高(06) 题目: 有图。转链接 题解: 平衡树/对顶堆水题,以往的博客已经有对此类题目的详细讲解了。 #include <iostream> #include <cstdio> #include <cstdlib> #define N 200005 #define inf 0x7fffffff u...

aochongbi5356的博客 116

华为OD机试双机位A卷 - VLAN资源池 (C++ & Python & JAVA & JS & GO)

华为OD机试2025双机位A卷 VLAN资源池,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 879

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

洛谷P1801 黑匣子

黑匣子 用平衡树

hyxasdddfghjkl的博客 326

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

[codevs2573/洛谷P1801]黑匣子

题目描述: 我们使用黑匣子的一个简单模型。它能存放一个整数序列和一个特别的变量i。在初始时刻,黑匣子为空且i等于0。这个黑匣子能执行一系列的命令。有两类命令: ADD(x):把元素x放入黑匣子; GET:把i加1的同时,输出黑匣子内所有整数中第i小的数。牢记第i小的数是当黑匣子中的元素已非降序排序后位于第i位的元素。现需要一个有效的算法处理给定的一系列命令。ADD和GET命令的总数至多个有30

dxyinme-Zz 1445

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

P1801 黑匣子 题解

本蒟蒻在洛谷的第一篇题解 我用的是对顶堆 堆用的是STL的priority_queue 对顶堆 顾名思义对顶堆就是两堆组合在一起 上面是小根堆下面是大根堆 如何应用 对于每次 add 我们先把数放在大根堆中 然后把大根堆的根放入小根堆中,再弹出大根堆的根,直到大根堆中只剩下 i 个元素 对于每次 get 我们先输出大根堆的根 ∵大根堆的根就是第 i 小的 然后把小根堆的根放入大根堆中,然后弹出小根堆的根 ∵ i 是递增的 优美代码 #include<iostream> #include&l

王俊吉的博客 257

【洛谷P1801】黑匣子

黑匣子 题目链接 看到题解中“维护两个堆”,突然想到了这道题的解法 维护两个堆:大根堆h1, 小根堆h2 大根堆里的是最小的i个值,小根堆里是剩下的值 每Add一个值时 插入到小根堆中, 再比较小根堆的最小值与大根堆的最大值 若h2.top()<h1.top() 将两个元素取出,换一下再放进去 需要Get时 将h2.top()取出,放进h1中, 再输出h1.top()...

weixin_30367873的博客 118

洛谷P1801 黑匣子_NOI导刊2010提高(06)

P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库。它可以储存一个整数数组,还有一个特别的变量i。最开始的时候Black Box是空的.而i等于0。这个Black Box要处理一串命令。 命令只有两种: ADD(x):把x元素放进BlackBox; GET:i加1,然后输出Blackhox中第i小的数。 记...

weixin_30344995的博客 90

洛谷P1801 黑匣子 双堆套路的使用

题意 题目链接 题解 这道题本可以用Treap暴力求解出来,但是不够优雅,因为没有充分利用到题目中给的条件,那就是要求的ithithith小的值的iii是单调递增的。 我们用两个堆来维护,大顶堆和小顶堆。 大顶堆中的元素是排好序的前i−1i−1i-1个,小顶堆里的元素个数是排好序的后n−i+1n−i+1n-i+1个。 这样每次询问的时候,我们只需要输出小顶堆中的最小的元素就ok了。...

SUNSET 375

洛谷-P1801 黑匣子_NOI导刊2010提高(06)

这个题就是让模拟一个数据库,有add和get两个操作,输入m,n;m代表一共添加m个树,n代表有n个get操作,给一共数组,b[i]表示,在添加进去前b[i]个数后输出第i小的。 我刚开始看到的时候想直接写一共vector,把元素按大小插入,然后直接输出就行了,倒是这么写也能过,但是可能慢一点吧 代码: #include <stdio.h> #include <algorithm...

Tom~~~ 225
上一篇: 【题解】洛谷P1631 序列合并
下一篇: 【题解】洛谷P3378 堆(模板)
Rem_Inory
博客等级 码龄8年 4粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值