class MasPq{
public:
MasPq(int _cap):cap(_cap+1){
q = vector<int>(cap,0);
};
MasPq(vector<int>& nums):cap(int(nums.size())+1){
q = vector<int>(cap,0);
n= cap-1;
for(int i=1;i<=n;++i) q[i]=nums[i-1];
for(int j=n/2;j>=1;--j) sink(j);
};
int top(){ return q[1];}
void pop(){
swap(q[1],q[n]);
n--;
sink(1);
return ;
}
void swim(int k){
int fa = k/2;
while(k>1&&q[fa]<q[k]){
swap(q[fa],q[k]);
k = fa;
fa = k/2;
}
return ;
}
void sink(int k){
int left = k*2;
int right = k*2+1;
while(left <=n){
int next = left;
if(right<=n&&q[left]<q[right]) next = right;
if(q[next]<q[k]) break;
swap(q[next],q[k]);
k =next;
left = k*2;
right = k*2+1;
}
return ;
}
void insert(int val){
n++;
q[n]=val;
swim(n);
}
private:
int cap;
int n=0;
vector<int> q;
};
优先队列-完全二叉堆实现
最新推荐文章于 2022-05-15 19:21:28 发布