UESTC 1063 小根堆
来源:互联网 发布:java开发文档api 编辑:程序博客网 时间:2024/05/20 05:55
F - 秋实大哥与妹纸
Time Limit:1000MS Memory Limit:1500KB 64bit IO Format:%lld & %lluDescription
致中和,天地位焉,万物育焉。秋实大哥是一个追求中庸的人。
虽然秋实大哥的仰慕者众多,但秋实大哥不喜欢极端的妹纸。所以他想从所有仰慕自己的妹纸中挑选出一个符合中庸之道的。
每一个妹纸对秋实大哥的仰慕程度可以用一个整数
计算有限个数的数据的中位数的方法是:
把所有的同类数据按照大小的顺序排列。如果数据的个数是奇数,则中间那个数据就是这群数据的中位数;如果数据的个数是偶数,则中间那2个数据的算术平均值就是这群数据的中位数。
Input
第一行有一个整数
接下来
Output
输出这
Sample Input
3
1
2
3
Sample Output
2.0
Hint
注意内存大小限制。
题解:这一题内存卡的紧,那么开250000的数组是MLE的,这时候可以用堆排序。先开成一半大小插入,在插入剩下的一半,由于是小根堆,得到的堆顶就是中位数。
#include <iostream> #include <cstdio> #define lid (fa << 1) #define rid (fa << 1 | 1) unsigned int l[125005] = {0}; void push(unsigned int x) { l[0]++; int fa = l[0]; l[fa] = x; while(fa / 2 > 0){ if(l[fa / 2] > l[fa]){ int temp = l[fa]; l[fa] = l[fa / 2]; l[fa / 2] = temp; fa = fa / 2; } else break; } } int down(int x) { int fa = x; int temp; int flag; while(1){ if(rid > l[0] && lid <= l[0] && l[fa] > l[lid]){ temp = l[lid]; l[lid] = l[fa]; l[fa] = temp; fa = lid; if(fa == 2) return 1; } else if(rid > l[0] && lid <= l[0]) break; else if(rid <= l[0] && lid <= l[0]){ if(l[fa] <= l[lid] && l[fa] <= l[rid]) break; else if(l[fa] > l[lid] && l[lid] <= l[rid]){ temp = l[lid]; l[lid] = l[fa]; l[fa] = temp; fa = lid; } else if((l[fa] > l[rid] && l[rid] <= l[lid])){ temp = l[rid]; l[rid] = l[fa]; l[fa] = temp; fa = rid; } } else break; } return fa; } void pop() { int temp = l[l[0]]; l[l[0]] = l[1]; l[1] = temp; l[0]--; while(1){ int flag = down(1); if(flag == 1) break; } } int main() { int n,t; unsigned int x; double out; scanf("%d",&n); t = n / 2 + 1; for(int i = 0; i < t; i ++){ scanf("%u",&x); push(x); } for(int i = t; i < n; i ++){ scanf("%u",&x); push(x); pop(); } if(n % 2 == 1){ out = (double) l[1]; printf("%.1lf",out); } else{ if(n == 2) out = (double) l[2] / 2; else if(l[2] < l[3]) out = (double) l[2] / 2; else out = (double) l[3] / 2; out += (double) l[1] / 2; printf("%.1lf",out); } return 0; }
0 0
- UESTC 1063 小根堆
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- OpenGL ES 学习教程(二) 可编程管线,Shader,一个彩色三角形!
- [Canvas绘图] 第05节 火柴天堂
- 2.2数据通信的基础知识
- LeetCode(268) Missing Number
- git 提交大文件错误解决办法
- UESTC 1063 小根堆
- String 转换 Date 和Date转换String
- HTTP状态码详解
- windows下通过putty登录虚拟机上的linux(桥接)
- 防火墙技术学习笔记一
- iOS 数据保存的4种方式
- Spring中初始化二
- 运算符优先级-C语言运算符优先级
- Android自定义View drawText绘制截取字符串