手写
constexpr int maxn=3e5+10;
int h[maxn],n;
void up(int p)
{
while (p>1)
{
if (h[p]>h[p>>1])
{
swap(h[p],h[p>>1]);
p>>=1;
}
else break;
}
}
void down(int p)
{
int s=p<<1;
while (s<=n)
{
if (s<n && h[s]<h[s+1]) s++;
if (h[s]>h[p])
{
swap(h[s],h[p]);
p=s;
s=p<<1;
}
else break;
}
}
void insert(int val)
{
h[++n]=val;
up(n);
}
void pop()
{
h[1]=h[n--];
down(1);
}
int gettop() {return h[1];}
void del(int p)
{
h[p]=h[n--];
up(p);
down(p);
}
//priority_queue<int> q;
insert:在堆顶加入一个数
pop:弹出堆顶
gettop:得到堆顶元素
del:删除一个在数组中下标为p的元素
- 使用
priority_queue<int,vector<int>,greater<int> > q;改为小根堆