当前位置:网站首页>Heap acwing 839 Simulated reactor
Heap acwing 839 Simulated reactor
2022-07-02 12:42:00 【T_ Y_ F666】
Pile up AcWing 839. Simulation reactor
Original link
AcWing 839. Simulation reactor
Algorithm tags
Pile up
Ideas
Because the title needs to support random modification and deletion , Therefore, each node mapping needs to be stored 
Excerpt from the solution
The exchange process

The corresponding code
void heap_swap(int a, int b)
{
// As shown in the blue dotted line
swap(ph[hp[a]],ph[hp[b]]);
// As shown in the green dotted line
swap(hp[a], hp[b]);
// In the pile a, b At two o 'clock
swap(h[a], h[b]);
}
Code
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
const int N = 100010;
// ph[k] = i To indicate , The first k The inserted number is in h[] Corresponding i How much is the
// hp{k] = i To indicate , Store... For each heap array k The subscript corresponds to i
int h[N], ph[N], hp[N], cnt;
void heap_swap(int a, int b)
{
// As shown in the blue dotted line
swap(ph[hp[a]],ph[hp[b]]);
// As shown in the green dotted line
swap(hp[a], hp[b]);
// In the pile a, b At two o 'clock
swap(h[a], h[b]);
}
void down(int u)
{
int t = u;
if (u * 2 <= cnt && h[u * 2] < h[t]) t = u * 2;
if (u * 2 + 1 <= cnt && 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] < h[u / 2])
{
heap_swap(u, u / 2);
u >>= 1;
}
}
int main()
{
int n, m = 0;
scanf("%d", &n);
while (n -- )
{
char op[5];
int k, x;
scanf("%s", op);
if (!strcmp(op, "I"))
{
scanf("%d", &x);
cnt ++ ;
m ++ ;
// Add mapping
ph[m] = cnt, hp[cnt] = m;
// Insert numbers x
h[cnt] = x;
up(cnt);
}
else if (!strcmp(op, "PM")) printf("%d\n", h[1]);
else if (!strcmp(op, "DM"))
{
heap_swap(1, cnt);
cnt -- ;
down(1);
}
else if (!strcmp(op, "D"))
{
scanf("%d", &k);
k = ph[k];
heap_swap(k, cnt);
cnt -- ;
up(k);
down(k);
}
else
{
scanf("%d%d", &k, &x);
k = ph[k];
h[k] = x;
up(k);
down(k);
}
}
return 0;
}
Originality is not easy.
Reprint please indicate the source
If it helps you Don't forget to praise and support 
边栏推荐
- Drools executes string rules or executes a rule file
- 高性能纠删码编码
- JDBC 预防sql注入问题与解决方法[PreparedStatement]
- Drools executes the specified rule
- 应用LNK306GN-TL 转换器、非隔离电源
- 分布式机器学习框架与高维实时推荐系统
- PR 2021 quick start tutorial, learn about the and functions of the timeline panel
- Leetcode - < dynamic planning special> Jianzhi offer 19, 49, 60
- 线性DP AcWing 897. 最长公共子序列
- 考研英语二大作文模板/图表作文,英语图表作文这一篇就够了
猜你喜欢

防抖 节流

堆 AcWing 839. 模拟堆

JSON序列化 与 解析

Record the range of data that MySQL update will lock

AI中台技术调研

线性DP AcWing 895. 最长上升子序列

区间DP AcWing 282. 石子合并

Docker compose configuration mysql, redis, mongodb

线性DP AcWing 902. 最短编辑距离

In development, why do you find someone who is paid more than you but doesn't write any code?
随机推荐
Interview with meituan, a 34 year old programmer, was rejected: only those under the age of 30 who work hard and earn little overtime
Anti shake throttle
Multiply LCA (nearest common ancestor)
IPhone 6 plus is listed in Apple's "retro products" list
When uploading a file, the server reports an error: iofileuploadexception: processing of multipart / form data request failed There is no space on the device
js1day(输入输出语法,数据类型,数据类型转换,var和let区别)
JS7day(事件对象,事件流,事件捕获和冒泡,阻止事件流动,事件委托,学生信息表案例)
Oracle从入门到精通(第4版)
Redis bloom filter
VLAN experiment
包管理工具
Is the neural network (pinn) with embedded physical knowledge a pit?
js 迭代器 生成器 异步代码处理 promise+生成器 -> await/async
基于STM32的OLED 屏幕驱动
Some sudden program ideas (modular processing)
Input box assembly of the shutter package
Visual studio efficient and practical extension tools and plug-ins
Deep Copy Event bus
Lekao: 22 year first-class fire engineer "technical practice" knowledge points
绕过ObRegisterCallbacks需要驱动签名方法