题解 | #【模板】堆#
【模板】堆
https://www.nowcoder.com/practice/13f61c8c92404f5ea5d6fa4c692869fb
#include <functional>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
class MaxHeap {
public:
MaxHeap(): heapSize(0) {};
void push(int x) {
// nums.push_back(x);
pque.push(x);
heapSize++;
// heapify_up(heapSize - 1);
};
int top() {
if (pque.size() == 0) return -1;
// return nums[0];
return pque.top();
};
void pop() {
if (pque.size() == 0) {
cout << "empty" << endl;
return;
}
cout << pque.top() << endl;
pque.pop();
// swap(nums[0], nums[heapSize - 1]);
// heapSize--;
// heapify_down(0);
};
private:
vector<int> nums;
int heapSize;
function<bool(int,int)> cmp= [](int a,int b){
return a<b;
};
priority_queue<int,vector<int>,function<bool(int,int)>> pque{cmp};
void heapify_up(int i) {
int parent = (i - 1) / 2;
while (parent >= 0) {
heapify_down(parent);
parent--;
}
}
void heapify_down(int i) {
int largest = i;
int left = i * 2 + 1;
int right = i * 2 + 2;
if (left < heapSize && nums[largest] < nums[left]) largest = left;
if (right < heapSize && nums[largest] < nums[right]) largest = right;
if (largest != i) {
swap(nums[largest], nums[i]);
heapify_down(largest);
}
}
};
int main() {
MaxHeap p;
int n, a;
cin >> n;
string op;
while (cin >> op) {
if (op == "push") {
cin >> a;
p.push(a);
} else if (op == "top") {
int x = p.top();
if (x != -1)
cout << x << endl;
else cout << "empty" << endl;
} else if (op == "pop") {
p.pop();
}
}
}
// 64 位输出请用 printf("%lld")

查看1道真题和解析