洛谷 P3378 堆

C++ 每日一题3:小根堆操作 每日一题3 阅读详情
传送门

题目描述

如题,初始小根堆为空,我们需要支持以下3种操作:

操作1: 1 x 表示将x插入到堆中

操作2: 2 输出该小根堆内的最小数

操作3: 3 删除该小根堆内的最小数

输入输出格式

输入格式:

第一行包含一个整数N,表示操作的个数

接下来N行,每行包含1个或2个正整数,表示三种操作,格式如下:

操作1: 1 x

操作2: 2

操作3: 3

输出格式:

包含若干行正整数,每行依次对应一个操作2的结果。

输入输出样例

输入样例:

5
1 2
1 5
2
3
2

输出样例:

2
5

说明

时空限制:1000 ms , 128 M

数据规模:

对于30%的数据:N<=15

对于70%的数据:N<=10000

对于100%的数据:N<=1000000(注意是6个0。。。不过不要害怕,经过编者实测,堆是可以AC的)


样例说明:


故输出为2、5


题解

堆(也叫优先队列)是一棵完全二叉树,堆中的某个节点的值总是不大于或不小于它的父节点的值。前者叫做大根堆,后者叫做小根堆。


上图一个为大根堆,保证每一个节点的值都小于或等于它父节点的值。

本题的操作为维护一个小根堆。

在一个堆中,若一个非叶子结点的编号为 x,则它的左儿子的编号为 x*2,若他有右儿子,则它的右儿子的编号为 x*2+1。若一个非根节点的编号为x,则它的父节点的编号为 x/2。

维护堆有两种操作:

(1).从根节点开始向下维护

找到父节点(x)的值与它的一个(x*2)或两个儿子(x*2 与 x*2+1)的值中最小的一个,如父节点的值不是最小的,则交换,反之则维护完成。

(2).从叶子结点开始向上维护

若一个节点(x)的值小于它的父节点(x/2)的值,则交换,反之则维护完成。

1.插入

往堆中插入一个数 x。

我们先把 x 放到堆的末尾,然后向上维护小根堆。

2.输出该小根堆内的最小数

输出根节点。

3.删除

把堆的末尾的值放到根节点,向下维护小根堆。


Code: 

#include<cstdio>
#include<cstdlib>

int a[1000010];
int n,m;

void su(int x)
{
    while(x/2>0 && a[x]<a[x/2])
    {
        int t=a[x];a[x]=a[x/2];a[x/2]=t;
        x=x/2;
    }
}

void sd(int x)
{
    int t;
    while(x*2<=m)
    {
        if(a[x]>a[x*2]) t=x*2;else t=x;
        if(x*2+1<=m && a[t]>a[x*2+1]) t=x*2+1;
        if(t!=x) {int tt=a[x];a[x]=a[t];a[t]=tt;x=t;}
        else break;
    }
}

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        int p;
        scanf("%d",&p);
        if(p==1)
        {
            int x;
            scanf("%d",&x);
            m++;a[m]=x;
            su(m);
        }
        if(p==2) printf("%d\n",a[1]);
        if(p==3)
        {
            a[1]=a[m];m--;
            sd(1);
        }
    }
}

Claude Code Router 401错误修复 claude code router配置相关环境变量问题 阅读详情

相关推荐

星光、黑光、全彩夜视摄像头技术解析与实战选型指南

本文深入解析了星光、黑光、全彩与红外等主流夜视摄像头技术的工作原理与核心差异。针对不同监控场景与预算,提供了实战选型指南,帮助用户在安防项目中做出明智决策,实现夜间监控效果最大化。

weixin_29179311的博客 347

[数据结构] 配对堆

模板链接:https://www.luogu.org/problemnew/show/P3371 【模板】堆 题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: 第一行包含一个整数N,表示操作的个数 接下来N行,每行包含...

ShadyPi的IT笔记 905

Win11下WSL2安装Ubuntu22.04避坑指南:从镜像源到C++环境配置

本文提供了一份详细的Win11下WSL2安装Ubuntu22.04的实战避坑指南。内容涵盖从WSL2核心安装、自定义安装路径,到更换国内镜像源以解决更新缓慢问题,并一站式配置完整的C++开发环境(包括GCC、CMake、vcpkg等),最后分享提升开发体验的进阶技巧,助你在Windows上打造高效的Linux开发工作站。

weixin_29260291的博客 562

[洛谷 3378] 堆 模板

题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: 第一行包含一个整数N,表示操作的个数 接下来N行,每行包含1个或2个正整数,表示三种操作,格式如下: 操作1: 1 x 操作2: 2 操作3: 3 输出格式: 包含若干行正整...

笑面蘑菇的博客 389

贴片二极管SOD封装详解:SOD-123/323/523尺寸焊盘设计要点

表面贴装技术中,二极管封装尺寸直接决定PCB布局与焊接可靠性。SOD封装作为小外形二极管的主流形态,其SOD-123、SOD-323、SOD-523三种规格分别对应不同的功耗与占板面积权衡。理解封装尺寸、焊盘设计计算逻辑和钢网开窗原理,是避免立碑、虚焊等工艺缺陷的关键。在可穿戴设备、电源保护等空间受限场景中,合理选择封装不仅能优化散热路径,还能提升量产良率。本文从焊盘计算、工艺要点到选型策略,全面解析SOD封装的工程实践。

weixin_42520780的博客 306

CrackerXI+脱壳实战:解决iOS应用逆向中的加密文件问题

本文详细介绍了如何使用CrackerXI+工具对iOS应用进行脱壳,解决App Store应用因FairPlay DRM加密而无法进行静态分析的难题。通过图形化界面一键操作,CrackerXI+能高效获取解密后的可执行文件,为逆向工程奠定基础。文章涵盖工具选型、实战步骤及常见问题排查,是iOS逆向入门与进阶的实用指南。

seed的博客 258

P3378 堆

题目描述如题,初始小根堆为空,我们需要支持以下3种操作:操作1: 1 x 表示将x插入到堆中操作2: 2 输出该小根堆内的最小数操作3: 3 删除该小根堆内的最小数输入输出格式输入格式: 第一行包含一个整数N,表示操作的个数接下来N行,每行包含1个或2个正整数,表示三种操作,格式如下:操作1: 1 x操作2: 2操作3: 3输出格式: 包含若干行正整数,每行依次对应一个操作2的结果。输入输出样例

qq_37042896的博客 510

端到端自动驾驶的精准测试场景开发

1. 背景介绍 自动驾驶技术的发展正在改变交通运输的未来,然而,要实现安全可靠的自动驾驶,需要进行大量的测试和验证。端到端自动驾驶系统的测试场景开发是实现这一目标的关键。本文将详细介绍端到端自动驾驶的精准测试场景开发,包括核心概念、算法原理、数学模型、项目实践,以及未来发展趋势。 2. 核心概念与联系

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1319

[堆] 洛谷P3378 二叉堆模板

题目 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 二叉堆 支持两种操作 1.往一个集合加一个数。 2.从集合中删去一个优先值最大的元素。 规则 每个结点比儿子优先级大。 插入规则:先插入到最后一个结点,然后不停与父节点交换,直到到了根节点或者比父...

OI - IceCab 475

如何学习总线技术

如何学习总线技术 以形象生动的比喻来描绘了总线技术的基本思想,指出了总线的基本分类和总线传输的基本原理,以及在学习过程中应当掌握的最基本的知识,对初学者有起到抛砖引入的作用。 0引言   如果一座只能容一个人来往的独木桥,两端的人都想要过桥,为了不拥挤、阻塞,那我们就得采取有效的办法。比如规定某段时间哪端的人过桥,另一端的人就等着该他过桥的时间段的到来,同时也还可以规定人多时要按先来后到或年

ce123的技术博客 8528

实现画布拖拽算子排布,通过flink实现算子编排计算,如何实现?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1071

洛谷 P3378 【模板】堆

洛谷 P3378 【模板】堆 Description 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 Input 第一行包含一个整数N,表示操作的个数 接下来N行,每行包含1个或2个正整数,表示三种操作,格式如下: 操作1: 1 x 操作2: 2 操作3: 3 Ou...

aochongbi5356的博客 148

【语音识别】基于MFCC特征实现说话人语音识别matlab源码

1 模型 采用能够反映人对语音的感知特性的Mel频率倒谱系数(MFCC)作为特征参数,以及为避免时间规整问题采用矢量量化技术开发的说话人识别系统.MFCC主要的是模拟人耳的听觉过程,相对于其它参数它对语音波形的变化不敏感,更加稳定,系统取得很好的识别结果,实验表明系统训练和识别的计算量和存储量都比较低. 2 部分代码 functionvarargout=Main(varargin) % MAIN M-file for Main.fig % MAIN, by itself...

qq_59747472的博客 848

洛谷 P3378:[模板] 堆 ← 二叉堆

为什么大家常说 “priority_queue 就是堆”? 在 C++ 日常开发 / 算法题中,99% 的场景只需要普通二叉堆(大根 / 小根堆),而 priority_queue刚好完美封装了普通二叉堆的所有核心操作。

hnjzsyjyj的专栏 1004

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

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

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

P3378 【模板】堆(小根堆,洛谷,java)

洛谷链接:https://www.luogu.com.cn/problem/P3378 洛谷对java非常不友好,这题只拿了70分 import java.util.PriorityQueue; import java.util.Scanner; public class Main { static PriorityQueue<Integer> minHeap=new...

weixin_44685629的博客 361

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

洛谷 - P3378 【模板】堆

模板 堆。

这个人是一个c++修狗 244

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

洛谷P3378——【模板】堆

洛谷P3378 输入样例: 5 1 2 1 5 2 3 2 输出样例: 2 5 AC代码: #include<bits/stdc++.h> using namespace std; const int maxn=1e6+5; int heap[maxn]; int ind=0; void insertHeap()//自下向上调整堆,因为除新加的结点外符合小根堆定义 { for(i...

Lucas9的博客 365

堆与并查集。洛谷P3378&P3367

晚上A了一堆板子题我太弱了!堆:洛谷P3378AC代码:(STL // luogu-judger-enable-o2 #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<string> #include<map...

weixin_30594001的博客 187
上一篇: 洛谷 P1439 最长公共子序列
下一篇: 洛谷 P1120 小木棍 [数据加强版](深搜)
Dawn_LLLLLLL
博客等级 码龄9年 12粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值