F - 秋实大哥与妹纸

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 1500/1500KB (Java/Others)
Submit Status

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

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

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

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

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

Input

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

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

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

Output

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

Sample input and output

Sample Input Sample Output
3
1
2
3
2.0

Hint

注意内存大小限制。

解题报告:

内存只能开一半..我们采用大根堆来维护,前一半直接读入大根堆,对于后一半的数据,若该数大于跟的max,则该元素是无用的,若小于,pop掉max值,再将该值压入heap中,最后根据n的奇偶性来读取heap前两层的数.

因为本题内存限制很紧。。因此使用的C语言来写

#include <stdio.h>
#define maxn 125005
int heapsize = ,heap[maxn],maxheapsize,n; void swap(int *x,int *y)
{
int temp = *x;
*x = *y;
*y = temp;
} void insert(int x)
{
heap[++heapsize] = x;
int cur = heapsize , pre = heapsize / ;
while(pre > )
{
if (heap[cur] > heap[pre])
{
swap(&heap[cur],&heap[pre]);
cur = pre;
pre = cur / ;
}
else
break;
}
} void maintainheap()
{
// New Ele insert,maintain the heap
int cur = , tar = *cur;
while(tar <= maxheapsize)
{
if (tar + <= heapsize && heap[tar+] > heap[tar])
tar++;
if (heap[tar] > heap[cur])
{
swap(&heap[tar],&heap[cur]);
cur = tar;
tar = cur*;
}
else
break;
}
} int main(int argc,char *argv[])
{
int i;
scanf("%d",&n);
maxheapsize = n/+;
for(i = ; i <= maxheapsize ; ++ i)
{
int temp;
scanf("%d",&temp);
insert(temp);
}
for(; i <= n ; ++ i)
{
int temp;
scanf("%d",&temp);
if (temp < heap[])
{
heap[] = temp;
maintainheap();
}
}
long long ans = ;
if (n % )
{
ans = heap[];
printf("%.1f\n",(double)ans);
}
else
{
ans = heap[];
long long qans = heap[];
if (heap[] > qans)
qans = heap[];
ans += qans;
printf("%.1f\n",(double)ans/.*.);
}
return ;
}

UESTC_秋实大哥与妹纸 2015 UESTC Training for Data Structures<Problem F>的更多相关文章

  1. UESTC_秋实大哥与线段树 2015 UESTC Training for Data Structures<Problem M>

    M - 秋实大哥与线段树 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Sub ...

  2. UESTC_秋实大哥与时空漫游 2015 UESTC Training for Graph Theory<Problem C>

    C - 秋实大哥与时空漫游 Time Limit: 4500/1500MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Su ...

  3. UESTC_秋实大哥与连锁快餐店 2015 UESTC Training for Graph Theory<Problem A>

    A - 秋实大哥与连锁快餐店 Time Limit: 9000/3000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) S ...

  4. UESTC_秋实大哥の恋爱物语 2015 UESTC Training for Search Algorithm & String<Problem K>

    K - 秋实大哥の恋爱物语 Time Limit: 5000/2000MS (Java/Others)     Memory Limit: 32000/32000KB (Java/Others) Su ...

  5. UESTC_秋实大哥搞算数 2015 UESTC Training for Data Structures<Problem N>

    N - 秋实大哥搞算数 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Subm ...

  6. UESTC_秋实大哥下棋 2015 UESTC Training for Data Structures<Problem I>

    I - 秋实大哥下棋 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  7. UESTC_秋实大哥打游戏 2015 UESTC Training for Data Structures<Problem H>

    H - 秋实大哥打游戏 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Subm ...

  8. UESTC_秋实大哥去打工 2015 UESTC Training for Data Structures<Problem G>

    G - 秋实大哥去打工 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Subm ...

  9. UESTC_秋实大哥与家 2015 UESTC Training for Data Structures<Problem E>

    E - 秋实大哥与家 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

随机推荐

  1. 理解 Linux 配置文件分类和使用

    理解 Linux 配置文件分类和使用 本文说明了 Linux 系统的配置文件,在多用户.多任务环境中,配置文件控制用户权限.系统应用程序.守护进程.服务和其它管理任务.这些任务包括管理用户帐号.分配磁 ...

  2. <转载>僵尸进程

    转载http://www.cnblogs.com/scrat/archive/2012/06/25/2560904.html 什么是僵尸进程 僵尸进程是指它的父进程已经退出(父进程没有等待(调用wai ...

  3. python高级编程之选择好名称:pepe8和命名最佳实践

    # # -*- coding: utf-8 -*- # # python:2.x # __author__ = 'Administrator' # my_list=['a','b','c','d'] ...

  4. Cocoa Pods的安装

    CocoaPods是用Ruby实现的,要想使用它首先需要有Ruby的环境.幸运的是OS X系统默认已经可以运行Ruby了,因此我们只需执行以下命令: sudo gem install -n /usr/ ...

  5. View中取设置了Tag的UILabel

    UILabel *badge = (UILabel *)[self.view viewWithTag:];

  6. truncate 、delete与drop三者的异同

    相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL语句(数据定义语言),执行后会自动提交. 不同点: 1. t ...

  7. linux学习方法之二

    相信不少想学习linux的新手们正愁不知道看什么linux学习教程好,下面小编给大家收集和整理了几点比较重要的教程,供大家学习,如需想学习更多的话,可到wdlinux学堂寻找更多教程. 安装php扩展 ...

  8. LDA-线性判别分析(四)

    本来是要调研 Latent Dirichlet Allocation 的那个 LDA 的, 没想到查到很多关于 Linear Discriminant Analysis 这个 LDA 的资料.初步看了 ...

  9. kaggle之泰坦尼克的沉没

    Titanic 沉没 参见:https://github.com/lijingpeng/kaggle 这是一个分类任务,特征包含离散特征和连续特征,数据如下:Kaggle地址.目标是根据数据特征预测一 ...

  10. ServiceAccount 枚举

    指定服务的安全上下文,安全上下文定义其登录类型. 命名空间:  System.ServiceProcess程序集:  System.ServiceProcess(在 System.ServicePro ...