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 ...