二叉堆【小顶堆】数组模板+C++STL
1 #include <iostream>
2 #include <algorithm>
3 #include <cstring>
4 #include <vector>
5 using namespace std;
6 const int SIZE = 1e6;
7 int heap[SIZE], n;
8
9
10 void up(int p) {
11 while(p > 1) {
12
13 if(heap[p] < heap[p/2]) {
14 swap(heap[p], heap[p/2]);
15 p /= 2;
16 }
17 else break;
18 }
19 }
20
21 void Insert(int val) {
22 heap[++n] = val;
23 up(n);
24 }
25
26 int GetTop() {
27 return heap[1];
28 }
29
30 void down(int p) {
31 int s = p * 2;
32 while(s <= n) {
33 if(heap[s] > heap[s+1] && s < n) s++;
34 if(heap[s] < heap[p]){
35 swap(heap[s], heap[p]);
36 p = s, s = p * 2;
37 }
38 else break;
39 }
40 }
41 void ExTract() {
42 heap[1] = heap[n--];
43 down(1);
44 }
45 void remove(int k) {
46 heap[k] = heap[n--];
47 up(k), down(k);
48 }
49 int main() {
50 int t;
51 cin >> t;
52 for(int i = 0; i < t; ++ i) {
53 int a;
54 cin >> a;
55 Insert(a);
56 }
57 return 0;
58 }
1 priority_queue<int, vector<int>, greater<int>> heap;
追求吾之所爱
浙公网安备 33010602011771号