当前位置:网站首页>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 terminates the execution of other rules after executing one rule
- 考研英语二大作文模板/图表作文,英语图表作文这一篇就够了
- About asp Net MVC project in local vs running response time is too long to access, the solution!
- [I'm a mound pytorch tutorial] learning notes
- NTMFS4C05NT1G N-CH 30V 11.9A MOS管,PDF
- Programmers can't find jobs after the age of 35? After reading this article, you may be able to find the answer
- Fastdateformat why thread safe
- CV2 in OpenCV VideoWriter_ Fourcc() function and cv2 Combined use of videowriter() function
- JSON序列化 与 解析
- Adding database driver to sqoop of cdh6
猜你喜欢

LTC3307AHV 符合EMI标准,降压转换器 QCA7005-AL33 PHY
![[ybtoj advanced training guidance] judgment overflow [error]](/img/be/bbe357ac2f2a8839afc5af47db88d0.jpg)
[ybtoj advanced training guidance] judgment overflow [error]

JSON序列化 与 解析

MySQL and PostgreSQL methods to grab slow SQL

Deep Copy Event bus

染色法判定二分图 AcWing 860. 染色法判定二分图

High performance erasure code coding

高性能纠删码编码

Direct control PTZ PTZ PTZ PTZ camera debugging (c)

哈希表 AcWing 841. 字符串哈希
随机推荐
CV2 in OpenCV VideoWriter_ Fourcc() function and cv2 Combined use of videowriter() function
浏览器存储方案
[ybtoj advanced training guide] similar string [string] [simulation]
Leetcode - Sword finger offer 37, 38
std::vector批量导入快速去重方法
Leetcode - < dynamic planning special> Jianzhi offer 19, 49, 60
bellman-ford AcWing 853. 有边数限制的最短路
Leetcode - Sword finger offer 51 Reverse pairs in an array
Writing method of then part in drools
Oracle从入门到精通(第4版)
[ybtoj advanced training guidance] judgment overflow [error]
Rust search server, rust quick service finding tutorial
Typora+docsify quick start
Go learning notes - multithreading
Day12 control flow if switch while do While guessing numbers game
Intel internal instructions - AVX and avx2 learning notes
Introduction to CPU instruction set
JSON序列化 与 解析
趣味 面试题
百款拿来就能用的网页特效,不来看看吗?