[Swust OJ 1094]--中位数(巧用set,堆排序)
题目链接:http://acm.swust.edu.cn/problem/1094/
中位数(又称中值,英语:Median),统计学中的专有名词,代表一个样本、种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分。对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,则中位数不唯一,通常取最中间的两个数值的平均数作为中位数。
多组输入
第一行:一个正整数N (0<N<1000000)
第二行:N个正整数。(0=<A[i]<2^30)
每组数据先输出”Case X:”,X表示测试数据的编号,从1开始。
第二行输出N个数,第i个数对应数组前i个值的中位数。(精确到小数点后一位)
1
2
3
4
5
|
5
1 2 3 4 5
6
2 5 4 8 7 4
|
1
2
3
4
5
|
Case 1:
1.0 1.5 2.0 2.5 3.0
Case 2:
2.0 3.5 4.0 4.5 5.0 4.5
|
- #include <iostream>
- #include <set>
- #include <cstdio>
- using namespace std;
- #define rep(i,a,b) for(int i=a;i<=b;i++)
- int t, n;
- multiset<double>mpt;
- void mid_num(){
- double x;
- printf("Case %d:\r\n", ++t);
- mpt.clear();
- scanf("%lf", &x);
- mpt.insert(x);
- multiset <double> ::iterator it = mpt.begin();
- printf("%.1lf", x);
- rep(i, , n){
- scanf("%lf", &x);
- mpt.insert(x);
- if (x < *it){
- if (i & ) printf(" %.1lf", *(--it));
- else {
- multiset <double> ::iterator it1 = it;
- printf(" %.1lf", (*it + *(--it1)) / 2.0);
- }
- }
- else {
- if (i & ) printf(" %.1lf", *it);
- else {
- ++it;
- multiset <double> ::iterator it1 = it;
- printf(" %.1lf", (*it + *(--it1)) / 2.0);
- }
- }
- }
- printf("\r\n");
- }
- int main(){
- while (~scanf("%d", &n))
- mid_num();
- return ;
- }
堆排序的代码也贴出来吧(原谅我太懒没有优化这代码~~~)
- #include <stdio.h>
- #include <string.h>
- int lstack[], ltot, rstack[], rtot, mid;
- int Max(int a, int b){
- return a > b ? a : b;
- }
- int Min(int a, int b){
- return a<b ? a : b;
- }
- void lup(int step){
- while (step != ){
- if (lstack[step]>lstack[step / ])lstack[step] ^= lstack[step / ] ^= lstack[step] ^= lstack[step / ];
- else break;
- step = step / ;
- }
- if (step == && lstack[] > mid) lstack[] ^= mid ^= lstack[] ^= mid;
- }
- void ldown(){
- if (ltot > && mid < lstack[]) mid ^= lstack[] ^= mid ^= lstack[];
- else return;
- int step = ;
- while (step * < ltot){
- if (step * + >= ltot){
- if (lstack[step] < lstack[step * ])
- lstack[step] ^= lstack[step * ] ^= lstack[step] ^= lstack[step * ], step = step * ;
- else return;
- }
- else{
- if (lstack[step] <= lstack[step * ] && lstack[step * + ] <= lstack[step * ])
- lstack[step] ^= lstack[step * ] ^= lstack[step] ^= lstack[step * ], step = step * ;
- else if (lstack[step] <= lstack[step * + ] && lstack[step * ] <= lstack[step * + ])
- lstack[step] ^= lstack[step * + ] ^= lstack[step] ^= lstack[step * + ], step = step * + ;
- else return;
- }
- }
- }
- void rup(int step){
- while (step != ){
- if (rstack[step]<rstack[step / ])rstack[step] ^= rstack[step / ] ^= rstack[step] ^= rstack[step / ];
- else break;
- step = step / ;
- }
- if (step == && rstack[]<mid) rstack[] ^= mid ^= rstack[] ^= mid;
- }
- void rdown(){
- if (rtot> && mid>rstack[]) mid ^= rstack[] ^= mid ^= rstack[];
- else return;
- int step = ;
- while (step * < rtot){
- if (step * + >= rtot){
- if (rstack[step] > rstack[step * ])
- rstack[step] ^= rstack[step * ] ^= rstack[step] ^= rstack[step * ], step = step * ;
- else return;
- }
- else{
- if (rstack[step] >= rstack[step * ] && rstack[step * + ] >= rstack[step * ])
- rstack[step] ^= rstack[step * ] ^= rstack[step] ^= rstack[step * ], step = step * ;
- else if (rstack[step] >= rstack[step * + ] && rstack[step * ] >= rstack[step * + ])
- rstack[step] ^= rstack[step * + ] ^= rstack[step] ^= rstack[step * + ], step = step * + ;
- else return;
- }
- }
- }
- int main()
- {
- int t = , n, i;
- while (scanf("%d", &n) != EOF){
- printf("Case %d:\r\n", t++);
- scanf("%d", &mid);
- ltot = rtot = ;
- printf("%.1lf", (double)mid);
- for (i = ; i < n; i++){
- if (i % ){
- scanf("%d", &lstack[ltot]);
- lup(ltot);
- rdown();
- ltot++;
- printf(" %.1lf", (mid + lstack[]) / 2.0);
- }
- else{
- scanf("%d", &rstack[rtot]);
- rup(rtot);
- ldown();
- rtot++;
- printf(" %.1lf", (double)mid);
- }
- }
- printf("\r\n");
- }
- return ;
- }
[Swust OJ 1094]--中位数(巧用set,堆排序)的更多相关文章
- [Swust OJ 404]--最小代价树(动态规划)
题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535 Des ...
- [Swust OJ 649]--NBA Finals(dp,后台略(hen)坑)
题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two ...
- SWUST OJ NBA Finals(0649)
NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128 Descri ...
- [Swust OJ 746]--点在线上(线段树解法及巧解)
题目链接:http://acm.swust.edu.cn/problem/746/ Time limit(ms): 1000 Memory limit(kb): 65535 fate是一个数学大牛 ...
- [Swust OJ 1026]--Egg pain's hzf
题目链接:http://acm.swust.edu.cn/problem/1026/ Time limit(ms): 3000 Memory limit(kb): 65535 hzf ...
- [swustoj 1094] 中位数
中位数(1094) 问题描述 中位数(又称中值,英语:Median),统计学中的专有名词,代表一个样本.种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分.对于有限的数集,可以通过把所有 ...
- 九度OJ 1371 最小的K个数 -- 堆排序
题目地址:http://ac.jobdu.com/problem.php?pid=1371 题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4 ...
- [Swust OJ 1023]--Escape(带点其他状态的BFS)
解题思路:http://acm.swust.edu.cn/problem/1023/ Time limit(ms): 5000 Memory limit(kb): 65535 Descript ...
- [Swust OJ 1125]--又见GCD(数论,素数表存贮因子)
题目链接:http://acm.swust.edu.cn/problem/1125/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ...
随机推荐
- JavaEE学习之类加载器
类装载子系统 在JAVA虚拟机中,负责查找并装载类型的那部分被称为类装载子系统. JAVA虚拟机有两种类装载器:启动类装载器和用户自定义类装载器.前者是JAVA虚拟机实现的一部分,后者则是Java程序 ...
- 5.7.1.2 eval() 方法
现在我们介绍最后一个方法,这大概是ECMAScript语言中最强大的一个方法:eval().eval()方法就想一个完整的ECMAScript解析器,它只接受一个参数,即要执行的ECMAScript( ...
- yii教程
http://www.yiichina.com/doc 官网是很好的参考文档
- https tomcat 证书搭建
首先生成证书说明 keytool -genkey -alias castest -keyalg RSA -keystore c:/keys/caskey 先让输入密码,密码必须记住,下面会用到 其中“ ...
- Oracle10g任务调度创建步骤
/* 创建可执行程序 */begin DBMS_SCHEDULER.CREATE_PROGRAM( program_name => 'peace_sj_his.PROG_DATASYNC', p ...
- C#使用Windows API 隐藏/显示 任务栏 (FindWindowEx, ShowWindow)
原文 C#使用Windows API 隐藏/显示 任务栏 (FindWindowEx, ShowWindow) 今天,有网友询问,如何显示和隐藏任务栏? 我这里,发布一下使用Windows API 显 ...
- Android开源项目(一)
Android开源项目(一) GitHub在中国的火爆程度无需多~~,越来越多的开源项目迁移到GitHub平台上.更何况,基于不要重复造轮子的原则~~~~了解当下比较流行的Android与iOS开源项 ...
- hdoj 1532 Drainage Ditches(最大网络流)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532 思路分析:问题为最大网络流问题,给定一个有向图,需要求解该有向图的最大网络流,使用Edmonds ...
- 谁有SMI-S Provider的一些源码,能参考一下吗
我要用OpenPegasus根据SMI-S规范来写provider,不知道如何下手啊,求高手指点
- JSP 9 大内置对象详解
内置对象特点: 1. 由JSP规范提供,不用编写者实例化. 2. 通过Web容器实现和管理 3. 所有JSP页面均可使用 4. ...