CDOJ 1063 堆排序模板
2024-09-05 16:11:45
D - 秋实大哥与妹纸
Time Limit:1000MS Memory Limit:1500KB 64bit IO Format:%lld & %llu
Appoint description:
System Crawler (2016-04-26)
System Crawler (2016-04-26)
Description
致中和,天地位焉,万物育焉。秋实大哥是一个追求中庸的人。
虽然秋实大哥的仰慕者众多,但秋实大哥不喜欢极端的妹纸。所以他想从所有仰慕自己的妹纸中挑选出一个符合中庸之道的。
每一个妹纸对秋实大哥的仰慕程度可以用一个整数ai来表示,秋实大哥想要找出这些数的中位数。
计算有限个数的数据的中位数的方法是:
把所有的同类数据按照大小的顺序排列。如果数据的个数是奇数,则中间那个数据就是这群数据的中位数;
如果数据的个数是偶数,则中间那2个数据的算术平均值就是这群数据的中位数。
Input
第一行有一个整数n,表示秋实大哥的仰慕者数目。
接下来n行,每行有一个正整数ai。
1≤n≤250000,1≤ai<231。
Output
输出这n个数的中位数,保留一位小数。
Sample Input
3
1
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;
}
最新文章
- 10月17日下午MySQl数据库CRUD高级查询
- Python 中 sqlite3的使用
- UnionPay,ChinaPay 最新 银联支付接口C#\Asp.net\MVC 版本
- 检测到在集成的托管管道模式下不适用的 ASP.NET 设置的解决方法
- @Component @Repository @Service @Controller
- cmd修改系统时间
- class不想被复制的两个做法
- HW-文件恢复-测试300
- Hadoop中的RPC
- 众数问题(为什么只能输入一组数据,不能输入m组数据)
- opencv BP神经网络使用过程
- 【网站建设】Linux上安装MySQL - 12条命令搞定MySql
- thinkphp 单图上传组建成数组然后追加到一个字段
- 平衡树简单教程及模板(splay, 替罪羊树, 非旋treap)
- B - 签到题
- python selenium设置chrome的下载路径
- 11.15java课后作业
- javascript 高级程序设计 十
- Vue 使用中的小技巧
- 通过beego快速创建一个Restful风格API项目及API文档自动化(转)