以小跟堆为例
加入一个数后的上调序
long long heap[N];
void up(long long p){
while(p>1){
if(heap[p]<heap[p/2]){
swap(heap[p],heap[p/2]);
p/=2;
}
else break;
}
}
删去头数的下调序
void down(long long p,long long n){
long long s=p*2;
while(s<=n){
if(s<n&&heap[s]>heap[s+1]) s++;
if(heap[s]<heap[p]){
swap(heap[s],heap[p]);
p=s;
s=p*2;
}
else break;
}
}
来看牛客竞赛的题目
题目描述
在本题中,你需要实现一个数据结构,它需要支持以下操作:
1. 插入:给定整数 xxx ,将数 xxx 插入该数据结构中。
2. 删除:将该数据结构的其中一个最小值从该数据结构中删除。
3. 加法:给定整数 xxx ,将该数据结构中的所有元素