当前位置:网站首页>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
边栏推荐
- High performance erasure code coding
- LeetCode—<动态规划专项>剑指 Offer 19、49、60
- Window10 upgrade encountered a big hole error code: 0xc000000e perfect solution
- [ybtoj advanced training guide] similar string [string] [simulation]
- BOM DOM
- 中国交通标志检测数据集
- Win10 system OmniPeek wireless packet capturing network card driver failed to install due to digital signature problem solution
- C#运算符
- CV2 in OpenCV VideoWriter_ Fourcc() function and cv2 Combined use of videowriter() function
- Input box assembly of the shutter package
猜你喜欢
[ybtoj advanced training guidance] judgment overflow [error]
Js7day (event object, event flow, event capture and bubble, prevent event flow, event delegation, student information table cases)
Docker-compose配置Mysql,Redis,MongoDB
ArrayList与LinkedList效率的对比
Sweetheart leader: Wang Xinling
Find the common ancestor of any two numbers in a binary tree
Bom Dom
This "little routine" is set on the dough cake of instant noodles. No wonder programmers are always hungry
JS7day(事件对象,事件流,事件捕获和冒泡,阻止事件流动,事件委托,学生信息表案例)
What is the relationship between NFT and metauniverse? How to view the market? The future market trend of NFT
随机推荐
High performance erasure code coding
Intel internal instructions - AVX and avx2 learning notes
Redis transaction mechanism implementation process and principle, and use transaction mechanism to prevent inventory oversold
哈希表 AcWing 841. 字符串哈希
趣味 面试题
FBX import under ue4/ue5 runtime
Simple understanding of ThreadLocal
BOM DOM
考研英语二大作文模板/图表作文,英语图表作文这一篇就够了
计数类DP AcWing 900. 整数划分
spfa AcWing 851. spfa求最短路
线性DP AcWing 898. 数字三角形
Use sqoop to export ads layer data to MySQL
线性DP AcWing 902. 最短编辑距离
AAAI 2022 | Peking University & Ali Dharma Institute: pruning and compression of pre training language model based on comparative learning
LeetCode—<动态规划专项>剑指 Offer 19、49、60
js1day(输入输出语法,数据类型,数据类型转换,var和let区别)
LeetCode—剑指 Offer 59 - I、59 - II
Anxiety of a 211 programmer: working for 3 years with a monthly salary of less than 30000, worried about being replaced by fresh students
Leetcode - Sword finger offer 51 Reverse pairs in an array