D - 秋实大哥与妹纸

Time Limit:1000MS     Memory Limit:1500KB     64bit IO Format:%lld & %llu

Appoint description: 
System Crawler  (2016-04-26)

Description

致中和,天地位焉,万物育焉。秋实大哥是一个追求中庸的人。

虽然秋实大哥的仰慕者众多,但秋实大哥不喜欢极端的妹纸。所以他想从所有仰慕自己的妹纸中挑选出一个符合中庸之道的。

每一个妹纸对秋实大哥的仰慕程度可以用一个整数ai来表示,秋实大哥想要找出这些数的中位数。

计算有限个数的数据的中位数的方法是:

把所有的同类数据按照大小的顺序排列。如果数据的个数是奇数,则中间那个数据就是这群数据的中位数;
如果数据的个数是偶数,则中间那2个数据的算术平均值就是这群数据的中位数。

Input

第一行有一个整数n,表示秋实大哥的仰慕者数目。

接下来n行,每行有一个正整数ai。

1≤n≤250000,1≤ai<231。

Output

输出这n个数的中位数,保留一位小数。

Sample Input



2

Sample Output

2.0

Hint

注意内存大小限制。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
typedef long long LL;
typedef unsigned long long Ull;
#define MM(a,b) memset(a,b,sizeof(a));
const double eps = 1e-10;
const int inf = 0x3f3f3f3f;
const double pi=acos(-1);
const int maxn=125000; int hp[maxn+10],sz;
void push(int x)
{
sz++;
int pre=sz/2,cur=sz;
while(pre>0)
{
if(hp[pre]<=x) break;
hp[cur]=hp[pre];
cur=pre;
pre=pre/2;
}
hp[cur]=x;
} void down(int i)
{
int x=hp[i];
int pre=i,chi=2*i;
while(chi<=sz)
{
chi+=((hp[chi]>hp[chi+1])&&(chi+1<=sz));
if(hp[chi]>=x) break;//注意是和x比啊,假设x放在父节点进行检验
hp[pre]=hp[chi];
pre=chi;
chi*=2;
}
hp[pre]=x;
} void change(int x)
{
if(x<hp[1]) return;
hp[1]=x; down(1);
} int main()
{
int n;
while(~scanf("%d",&n))
{
MM(hp,inf);//维护一个最小堆
int x;
sz=0;
for(int i=1;i<=n/2+1;i++)
{
scanf("%d",&x);
push(x);
}//5个的话读入3个,6个的话读入4个 for(int i=n/2+2;i<=n;i++)
{
scanf("%d",&x);
change(x);
} if(n%2==1)
printf("%.1f\n",(double)hp[1]);
else
{
double minn=min(hp[2],hp[3]);//没有限定左右儿子的大小
printf("%.1f\n",((hp[1]+minn)/2.0));//可能爆int
}
}
return 0;
}

  

最新文章

  1. 10月17日下午MySQl数据库CRUD高级查询
  2. Python 中 sqlite3的使用
  3. UnionPay,ChinaPay 最新 银联支付接口C#\Asp.net\MVC 版本
  4. 检测到在集成的托管管道模式下不适用的 ASP.NET 设置的解决方法
  5. @Component @Repository @Service @Controller
  6. cmd修改系统时间
  7. class不想被复制的两个做法
  8. HW-文件恢复-测试300
  9. Hadoop中的RPC
  10. 众数问题(为什么只能输入一组数据,不能输入m组数据)
  11. opencv BP神经网络使用过程
  12. 【网站建设】Linux上安装MySQL - 12条命令搞定MySql
  13. thinkphp 单图上传组建成数组然后追加到一个字段
  14. 平衡树简单教程及模板(splay, 替罪羊树, 非旋treap)
  15. B - 签到题
  16. python selenium设置chrome的下载路径
  17. 11.15java课后作业
  18. javascript 高级程序设计 十
  19. Vue 使用中的小技巧
  20. 通过beego快速创建一个Restful风格API项目及API文档自动化(转)

热门文章

  1. 【Angular5】 返回前一页面 go back to previous page
  2. 交换机安全学习笔记 第九~十章 HSRP VRRP
  3. [百度知道]ssm和ssh各自的优势
  4. adb 设置安卓连接wifi
  5. [TJOI2019] 甲苯先生的线段树
  6. 续AspectJ篇
  7. 啥是IOC ?啥是DI ?
  8. 链接Caffe,程序报错应用程序无法正常启动(0xc000007b)
  9. MySQL基础入门之常用命令介绍
  10. Redis入门部署及持久化