秋实大哥与妹纸 二叉堆(小根堆)
Source
2015 UESTC Training for Data Structures
The question is from here.
My Solution
Memory Limit: 1500/1500KB (Java/Others)
卡内存的题目,第一次遇到 (┬_┬)
维护好n/2+1个元素就好,后面的push,然后pop
本来用C++STL的priority_queue写了一个,结果爆内存了,MLE
所以用二叉堆来写
#include
#include
using namespace std;
const int maxn = 125001;
int heap[maxn], sz = 1;
inline void up(int i){
int x = heap[i];
for(int j = i >> 1; j >= 1; j >>= 1) {
if(heap[j] > x){
heap[i] = heap[j];
i = j;
} else {
break;
}
}
heap[i] = x;
}
inline void down(int i){
int x = heap[i];
for(int j = i << 1; j <= sz; j <<= 1){
j += j < sz && heap[j] > heap[j+1];
if(heap[j] < x){
heap[i] = heap[j];
i = j;
} else {
break;
}
}
heap[i] = x;
}
inline void push(int v){
heap[++sz] = v;
up(sz);
}
inline void pop(){
swap(heap[1], heap[sz]);
sz--;
down(1);
}
inline int top(){
return heap[1];
}
inline bool _empty(){
return sz == 0;
}
inline int _size(){
return sz;
}
int main()
{
int n, a;
scanf("%d", &n);
for(int i = 0; i < n/2 +1; i++){
scanf("%d", &a);push(a);
}
for(int i = n/2 +1; i < n; i++){
scanf("%d", &a);
push(a);pop();
}
pop();
if(n % 2 ==1) printf("%.1f", (double)heap[1]);
else{
a = top();pop();
printf("%.1f", (double)a/2+(double)top()/2);
}
return 0;
}
非特殊说明,本站所有文章均为博主原创,未经许可不得转载。
https://www.prolightsfxjh.com/
Thank you!
------from ProLightsfx
- THE END -
最后修改:2024年11月16日
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
如经许可后转载,请注明出处:https://prolightsfxjh.com/article/uestc-1063/
共有 0 条评论