C++:模拟堆

news/2024/10/19 5:26:48/

模拟堆

维护一个集合,初始集合为空,支持如下几种操作:
1.“I x”,插入一个数x
2.“PM” ,输出当前集合中的最小值
3.“DM”,删除当前集合中的最小值(当最小值不唯一时,删除最早插入的最小值)
4.“D k”,删除第k个插入的数
5.“C k x”,修改第k个插入的数,将其变为x
现在要进行N次操作,对于所有的第2个操作,输出当前集合的最小值

输入格式

第一行包含整数N
接下来N行,每行包含一个操作指令,操作指令"I x",“PM”,“DM”,"D k"或"C k x"中的一种

输出格式

对于每个输出指令"PM",输出一个结果,表示当前集合中的最小值
每个结果占一行

数据范围

1 ≤ N ≤ 1 0 5 1\le N\le 10^5 1N105
− 1 0 9 ≤ x ≤ 1 0 9 -10^9\le x\le 10^9 109x109
数据保证合法

输入样例

10
I -10
PM
I -10
D 1
C 2 8
I 6
PM
DM

输出样例

-10
6

AC代码

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;const int N = 1e5 + 10;int n, m;
int h[N], ph[N], hp[N], sz;void heap_swap(int a, int b) {swap(ph[hp[a]], ph[hp[b]]);swap(hp[a], hp[b]);swap(h[a], h[b]);
}void down(int u) {int t = u;     if(u * 2 <= sz && h[u * 2] < h[t]) t = u * 2;if(u * 2 + 1 <= sz && h[u * 2 + 1] < h[t]) t = u * 2 + 1 ;if(u != t) {heap_swap(u, t);down(t);}
}void up(int u) {while(u / 2 && h[u / 2] > h[u]) {heap_swap(u / 2, u);u /= 2;}
}int main() {scanf("%d", &n);while(n--) {char op[10];int k, x;scanf("%s", op);if(op[0] == 'I') {scanf("%d", &x);sz++,  m++;ph[m] = sz, hp[sz] = m;h[sz] = x;up(sz);} else if(!strcmp(op, "PM")) printf("%d\n", h[1]);else if(!strcmp(op, "DM")) {heap_swap(1, sz);sz--;down(1);} else if(op[0] == 'D') {scanf("%d", &k);k = ph[k];heap_swap(k, sz);sz--;down(k), up(k);} else {scanf("%d%d", &k, &x);k = ph[k];h[k] = x;down(k), up(k);}}return 0;
}

http://www.ppmy.cn/news/1026379.html

相关文章

Flink CEP(Complex Event Processing)库

复杂事件处理&#xff08;Complex Event Processing&#xff0c;CEP&#xff09;是一种用于在流式数据中识别和处理复杂事件模式的技术。Apache Flink 作为一个流式处理框架&#xff0c;也可以用于实现复杂事件处理。下面是 Flink 中实现复杂事件处理的一般原理&#xff1a; 事…

学生管理系统(Python版本)

class Student:def __init__(self, id, name, age):self.id idself.name nameself.age ageclass StudentManagementSystem:def __init__(self):self.students []def add_student(self, student):self.students.append(student)print("学生信息添加成功&#xff01;&qu…

在x86下运行的Ubuntu系统上部署QEMU用于模拟RISC-V硬件环境

1.配置工作环境 sudo apt install gcc bison flex libncurses-dev ninja-build \pkg-config build-essential zlib1g-dev pkg-config libglib2.0-dev \binutils-dev libboost-all-dev autoconf libtool libssl-dev \libpixman-1-dev python-capstone virtualenv software-prop…

小体积,大能量!邂逅飞凌OKMX6ULL开发板

机缘巧合参加了飞凌嵌入式的试用活动&#xff0c;也很幸运被任命为新品体验官&#xff0c;那么看下是哪一款核心板和底板吧。 →核心板&#xff1a;FETMX6ULL-C核心板 FETMX6ULL-C核心板采用NXP i.MX6ULL处理器开发设计&#xff0c;采用低功耗的ARM Cortex-A7架构&#xff0c…

【JavaScript】new 的原理以及实现

网道 - new 命令的原理 使用new命令时&#xff0c;它后面的函数依次执行下面的步骤。 创建一个空对象&#xff0c;作为将要返回的对象实例。将这个空对象的原型&#xff0c;指向构造函数的prototype属性。将这个空对象赋值给函数内部的this关键字。如果构造函数返回了一个对象…

面试攻略,Java 基础面试 100 问(九)

数组有没有 length()方法?String 有没有 length()方法&#xff1f; 数组没有 length()方法&#xff0c;有 length 的属性。String 有 length()方法。JavaScript 中&#xff0c;获得字符串的长度是通过 length 属性得到的&#xff0c;这一点容易和 Java混淆。 在 Java 中&…

论文阅读:《Waymo Public Road Safety Performance Data》

文章目录 1 背景2 方法2.1 数据来源2.2 碰撞数据 3 碰撞事件分析4 讨论 1 背景 这篇文章是讲waymo道路安全性能数据分析的&#xff0c;主要想表达的是waymo自动驾驶系统在安全上面的出色表现&#xff0c;以向政府、大众提高自己产品的公信力。 这篇文章分析的数据是自从2019年到…

智能优化算法:猎豹优化算法-附代码

智能优化算法&#xff1a;猎豹优化算法 文章目录 智能优化算法&#xff1a;猎豹优化算法1.猎豹优化算法1.1 初始化1.2 搜索策略1.3坐等策略1.4攻击策略 2.实验结果3.参考文献4.Matlab5.python 摘要&#xff1a;CO算法是Mohammad AminAkbari等人于2022年受自然界猎豹狩猎启发而提…