AcWing 839 模擬堆(C 演算法)

2021-10-24 08:30:36 字數 1266 閱讀 2301

1、題目:

維護乙個集合,初始時集合為空,支援如下幾種操作:

「i x」,插入乙個數x;

「pm」,輸出當前集合中的最小值;

「dm」,刪除當前集合中的最小值(資料保證此時的最小值唯一);

「d k」,刪除第k個插入的數;

「c k x」,修改第k個插入的數,將其變為x;

現在要進行n次操作,對於所有第2個操作,輸出當前集合的最小值。

輸入格式

第一行包含整數n。

接下來n行,每行包含乙個操作指令,操作指令為」i x」,」pm」,」dm」,」d k」或」c k x」中的一種。

輸出格式

對於每個輸出指令「pm」,輸出乙個結果,表示當前集合中的最小值。

每個結果佔一行。

資料範圍

1≤n≤105

−109≤x≤109

資料保證合法。

輸入樣例:

8i -10

pmi -10

d 1c 2 8

i 6pm

dm輸出樣例:

-106

2、基本思想:

建立對映,ph陣列表示由指標對映到堆,hp表示由堆對映到指標。

3、步驟:

需要乙個獨有的含對映的交換swap_heap()既要換值又要換對映。

#include

#include

using

namespace std;

const

int n =

100010

;int cnt, n;

int h[n]

, ph[n]

, hp[n]

;void

swap_heap

(int a,

int b)

//包含對映的交換函式

void

down

(int u)

}voidup(

int u)

}int

main()

elseif(

!strcmp

(op,

"pm"

)) cout << h[1]

<< endl;

elseif(

!strcmp

(op,

"dm"))

elseif(

!strcmp

(op,

"d")

)else

}return0;

}

ACwing 839 模擬堆(陣列模擬堆)

維護乙個集合,初始時集合為空,支援如下幾種操作 i x 插入乙個數x pm 輸出當前集合中的最小值 dm 刪除當前集合中的最小值 資料保證此時的最小值唯一 d k 刪除第k個插入的數 c k x 修改第k個插入的數,將其變為x 現在要進行n次操作,對於所有第2個操作,輸出當前集合的最小值。輸入格式 ...

AcWing 828 模擬棧(C 演算法)

1 push x 向棧頂插入乙個數x 2 pop 從棧頂彈出乙個數 3 empty 判斷棧是否為空 4 query 查詢棧頂元素。現在要對棧進行m個操作,其中的每個操作3和操作4都要輸出相應的結果。輸入格式 第一行包含整數m,表示操作次數。接下來m行,每行包含乙個操作命令,操作命令為 push x ...

AcWing 829 模擬佇列(C 演算法)

1 push x 向隊尾插入乙個數x 2 pop 從隊頭彈出乙個數 3 empty 判斷佇列是否為空 4 query 查詢隊頭元素。現在要對佇列進行m個操作,其中的每個操作3和操作4都要輸出相應的結果。輸入格式 第一行包含整數m,表示操作次數。接下來m行,每行包含乙個操作命令,操作命令為 push ...