本博客仅为模板,具体思路请参见作者博客堆
#include<cstdio>
#include<string>
#define Size 100000
#define LL long long
using namespace std;
class p_q_l {
private:
int size;
LL num[Size];
void up(const int n) {
int e = n / 2;
int temp = n;
while (temp > 1) {
if (temp < size)
if (num[temp + 1] > num[temp])
temp++;
if (num[temp] <= num[e])
break;
if (num[temp] > num[e])
swap(num[temp], num[e]);
temp = e;
e = temp / 2;
}
}
void down(const int n) {
int temp = n * 2;
int e = n;
while (temp <= size) {
if (temp < size)
if (num[temp + 1] > num[temp])
temp++;
if (num[temp] <= num[e])
break;
if (num[temp] > num[e])
swap(num[temp], num[e]);
e = temp;
temp = e * 2;
}
}
public:
void add(LL a) {
num[++size] = a;
up(size);
}
void del() {
swap(num[1], num[size]);
num[size] = 0;
size--;
down(1);
}
void del_chose(int a) {
swap(num[a], num[size]);
num[size] = 0;
up(a);
size--;
down(a);
}
LL top() {
return num[1];
}
int wide() {
return size;
}
};