C++对顶堆(求第k大、k小数)+P1801题解

news2025/2/28 19:20:08

这里借鉴了一些别人题解的思路,仅供自己收藏使用。

题目大意:动态修改数组,求第k小的数。

from:7KByte P1801题解

对此,POISONN大佬发表了他的意见:楼主写法应该是让大根堆里有k-1个元素,然后小根堆的堆顶才是第k小数吧?

(大概是因为单纯地在大根堆插入元素无法保证对顶堆中,大根堆元素恒小于小根堆的性质,所以需要让大根堆顶元素移动至小根堆吧?)

私认为他说得有道理。

Code: 以LuoguP1801 黑匣子为例

/*
模拟样例:
a:[3 1 -4 2 8 -1000 2]
u:[1 2 6 6]
A:[] (大根堆)
B:[] (小根堆)
i=1: pos=1,u=1  for[1]:j=1 A:[3] B:[3] A:[]
                cout<<3
                A:[3] B:[]
i=2: pos=2,u=2  for[1]:j=2 A:[3 1] B:[3] A:[1]
                cout<<3
                A:[3 1] B:[]
i=3: pos=3,u=6  for[1]:j=3 A:[3 1 -4] B:[3] A:[1 -4]
                for[2]:j=4 A:[2 1 -4] B:[2 3] A:[1 -4]
                for[3]:j=5 A:[8 1 -4] B:[2 3 8] A:[1 -4] 
                for[4]:j=6 A:[1 -4 -1000] B:[1 2 3 8] A:[-4 -1000]
                cout<<1
                A:[1 -4 -1000] B:[2 3 8]
i=4: pos=7,u=6  循环不执行
                cout<<2
                A:[2 1 -4 -1000] B:[3 8]
*/

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 7;

int a[200005];

int main()
{   
    ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);

    priority_queue <int> A; // 大根堆
    priority_queue <int, vector<int>, greater<int>> B; // 小根堆
    int n, m; cin >> n >> m;
    for(int i = 1; i <= n; i ++) cin >> a[i];

    int pos = 1;
    for(int u, i = 1; i <= m; i ++){ // 这个i就是GET查询中的i
        cin >> u;
        for(int j = pos; j <= u; j ++){ // 让第u个元素放入(可以这样做是因为题目说“保证u序列单调不降”)
            A.push(a[j]);
            if(A.size() == i) B.push(A.top()), A.pop();
        }
        pos = u + 1; // 表明当前a数组的下一次add操作应放入a[u+1]
        cout << B.top() << '\n';
        A.push(B.top());
        B.pop();
    }

    return 0;
}

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

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

相关文章

如何从硬盘恢复已删除的视频

您是否想知道是否可以恢复已删除的视频&#xff1f; 幸运的是&#xff0c;您可以使用照片恢复从硬盘、SD 卡和 USB 闪存驱动器恢复已删除的视频文件。 您是否曾发生过这样的情况&#xff1a;当您随机删除文件以释放空间时&#xff0c;您不小心按下了一些重要视频的删除按钮并…

捷配生产笔记-细间距芯片的表面处理工艺:OSP与沉金工艺的重要性

在现代电子制造领域&#xff0c;随着技术的进步&#xff0c;电子设备变得越来越小型化和高性能化。细间距芯片作为实现这一目标的关键组件&#xff0c;其制造工艺要求极为严格。在这些要求中&#xff0c;表面处理工艺尤为关键&#xff0c;因为它直接影响到芯片的焊接质量和长期…

教你如何快速输入公式——Mathpix

概述 相信各位博主在撰写技术性博客时&#xff0c;都遇到在markdown编辑器中输入公式的问题&#xff0c;自己慢慢输入公式太过麻烦&#xff0c;想要直接复制文献中的又显示异常&#xff0c;是在叫人为难。这里&#xff0c;教大家使用一个只用截图&#xff0c;就能自动生成公式…

宁盾单点登录厂商-快速实现统一身份认证、单点登录SSO、MFA多因素认证

在当今数字化时代&#xff0c;企业的IT基础设施日益复杂&#xff0c;多系统、多设备的应用场景使得统一身份认证和单点登录&#xff08;SSO&#xff09;成为企业提升安全性和业务效率的关键需求。宁盾&#xff0c;作为数字身份基础设施提供商&#xff0c;凭借其单点登录&#x…

使用AutoGPT构建智能体:从LSTM到Prompt编写实战教程001

如果报错,这里会有一个环境变量的设置需要设置上. 然后这一节我们来自己制作一个智能体,来感受一下,实际上现在,大模型还是可以做很多功能的. 可以看到上面是智能体的架构,之前也说过了, 上面这几个功能,如果用我们人类去操作,还是需要花些时间的,如果用大模型就快很多了. 以…

研究人员利用浏览器渲染过程来改变 PDF 发票定价

首发公众号网络研究观&#xff0c;微信搜索关注每日获取更多内容。 网络安全研究员 Zakhar Fedotkin 演示了如何利用不同浏览器和操作系统之间 PDF 渲染的差异来操纵 PDF 发票上显示的价格。 此漏洞可能会严重影响依赖数字发票进行交易的企业。 研究人员受到 Konstantin Wed…

寻找并可视化交互

「AI秘籍」系列课程&#xff1a; 人工智能应用数学基础 人工智能Python基础 人工智能基础核心知识 人工智能BI核心知识 人工智能CV核心知识 使用特征重要性、弗里德曼 H 统计量和 ICE 图分析相互作用 本文中的代码需要安装 R 语言包 药物的副作用可能取决于你的性别。吸入…

SFUZZ模糊测试平台全新升级,从标准到实践助力车企安全出海

开源网安模糊测试平台SFuzz全新升级&#xff0c;参照各国相关标准要求进行针对性建设&#xff0c;可为智能网联汽车信息安全测试提供更为强大的工具支持。SFuzz向被测系统输入大量随机数据&#xff0c;模拟各种异常情况&#xff0c;可以发现被测系统内潜在的缺陷和漏洞&#xf…

从10个地产客户案例里,我们发现智能工牌在提升案场转化中的价值

地产竞争进入白热化阶段&#xff0c;面对获客转化困境&#xff0c;提升客户体验和到访转化率是房企必须着手的破局点。 到底如何把握成交前的最后一公里&#xff0c;深入剖析客户需求及抗性、复制销冠能力、最终提升案场转化率&#xff1f; 随着人工智能&#xff08;AI&#…

大前端热点技术

前言 2018年后&#xff0c;整个大前端发展趋于稳定&#xff0c;各大主流框架的特性变少&#xff0c;各种新轮子也在逐渐变少&#xff0c;但在多端融合、上下游提效以及一些细分领域&#xff0c;还是有很多值得期待的。 本文将基于过去一年大前端方向在Web、Node、多端、IoT、…

【数据结构】--- 堆

​ 个人主页&#xff1a;星纭-CSDN博客 系列文章专栏 :数据结构 踏上取经路&#xff0c;比抵达灵山更重要&#xff01;一起努力一起进步&#xff01; 目录 一.堆的介绍 二.堆的实现 1.向下调整算法 2.堆的创建 3.堆的实现 4.堆的初始化和销毁 5.堆的插入 5.1扩容…

动手学Avalonia:基于硅基流动构建一个文生图应用(一)

文生图 文生图&#xff0c;全称“文字生成图像”&#xff08;Text-to-Image&#xff09;&#xff0c;是一种AI技术&#xff0c;能够根据给定的文本描述生成相应的图像。这种技术利用深度学习模型&#xff0c;如生成对抗网络&#xff08;GANs&#xff09;或变换器&#xff08;T…

一个spring boot项目的启动过程分析

1、web.xml 定义入口类 <context-param><param-name>contextConfigLocation</param-name><param-value>com.baosight.ApplicationBoot</param-value> </context-param> 2、主入口类: ApplicationBoot,SpringBoot项目的mian函数 SpringBo…

“删错文件后如何高效挽救?两大恢复策略全解析“

在数字化日益深入生活的今天&#xff0c;数据已成为我们工作、学习和娱乐不可或缺的一部分。然而&#xff0c;删错文件的经历却如同数字世界中的一场“小插曲”&#xff0c;不经意间就可能让我们陷入数据丢失的困境。无论是误触删除键、清空回收站&#xff0c;还是软件故障导致…

第十八章 Express multer 文件上传

本章将学习Express multer 文件上传 &#xff0c;因为Nest 的文件上传是基于 Express 的中间件 multer 实现的&#xff0c;所以在学习 Nest 文件上传之前&#xff0c;我们先学习下 multer 包 首先先创建 multer-test 文件夹执行下面代码 创建package.json npm init -y接着安装…

python学习01-安装

一.安装python 1.下载安装 首先要先下载安装包&#xff1a;Download Python | Python.org 网上建议下载python3.7.4版本&#xff0c;那就下载这个版本 2.验证 二.pip 1.升级pip pip 是 Python 的包管理工具&#xff0c;该工具提供了对Python 包的查找、下载、安装、卸载的…

BigMarket-基础层持久化数据库

需求 工程对接数据库 图例 结构说明 app-主要用于启动&#xff0c;没有业务逻辑 domain-业务逻辑&#xff0c;如积分的兑换&#xff0c;抽奖&#xff0c; infrastructure-基础层&#xff0c;技术支持&#xff0c;数据服务数据持久化&#xff1a;MySQL&#xff0c;redis&am…

在NVIDIA Jetson平台离线部署大模型

在NVIDIA Jetson平台离线部署大模型&#xff0c;开启离线具身智能新纪元。 本项目提供一种将LMDeploy移植到NVIDIA Jetson系列边缘计算卡的方法&#xff0c;并在Jetson计算卡上运行InternLM系列大模型&#xff0c;为离线具身智能提供可能。 最新新闻&#x1f389; [2024/3/1…

2024最适合小白的Midjourney教程,值得收藏!

一、Midjourney 的提示词 1、提示可以包括一个或多个图像 URL、多个文本短语以及一个或多个参数 1&#xff09;Image Prompts&#xff08;图像提示&#xff09;&#xff1a;可以将图像 URL 添加到提示中以影响最终结果的样式和内容。图像 URL 始终出现在提示的前面。文件应以.…

小型内衣裤洗衣机哪个牌子好?五大卓越臻品不容错过!

随着科技的发展&#xff0c;市面上也出现许多便利的小家电。其中被多次讨论起来的莫过于是内衣洗衣机&#xff0c;选择一款耐用、质量优秀的内衣洗衣机&#xff0c;不仅可以减少洗衣负担&#xff0c;还能提供高效的洗涤效果。然而&#xff0c;随着内衣洗衣机的爆火&#xff0c;…