POJ 3784 Running Median【维护动态中位数】
Description
Input
Output
Sample Input
3
1 9
1 2 3 4 5 6 7 8 9
2 9
9 8 7 6 5 4 3 2 1
3 23
23 41 13 22 -3 24 -31 -11 -8 -7
3 5 103 211 -311 -45 -67 -73 -81 -99
-33 24 56
Sample Output
1 5
1 2 3 4 5
2 5
9 8 7 6 5
3 12
23 23 22 22 13 3 5 5 3 -3
-7 -3
传送门:http://poj.org/problem?id=3784
题意:每次读入一个整数序列,每当已经读入的整数个数为奇数时,输出已读入的整数构成的序列的中位数
思路:建立两个二叉堆:一个小根堆,一个大根堆。每次读入一个数X,若X比中位数小,则放入大根堆中,若X比中位数大,则放入小根堆中。如果某个时候,堆中的元素个数之差为2,则取出元素个数较多的那个堆的堆顶元素,放入另一个堆中,同时更新中位数。
代码:
#include<bits/stdc++.h> using namespace std; int ans[];
int main() {
int T;
scanf("%d", &T);
while(T--) { int t;
int n;
int mid; scanf("%d%d%d", &t, &n, &mid); int cnt = ;
ans[++cnt] = mid; priority_queue<int, vector<int>, greater<int> >s;//小根堆 priority_queue<int, vector<int>, less<int> >b;//大根堆
for(int i = ; i <= n; i++)
{
int temp;
scanf("%d", &temp); if(temp > mid)
{
s.push(temp);
if(s.size() - b.size() == )
{
b.push(mid);
mid = s.top();
s.pop();
}
}
else
{
b.push(temp);
if(b.size() - s.size() == )
{
s.push(mid);
mid = b.top();
b.pop();
}
}
if(i % )
ans[++cnt] = mid;
} printf("%d %d\n", t, n / + );
printf("%d", ans[] ); for(int i = ; i <= cnt; i++)
{
printf(" %d", ans[i]);
if(i % == )
{
printf("\n");
if(i != cnt)
{
printf("%d", ans[i + ]);
i++;
}
}
}
printf("\n");
}
}
POJ 3784 Running Median【维护动态中位数】的更多相关文章
- POJ 3784 Running Median(动态维护中位数)
Description For this problem, you will write a program that reads in a sequence of 32-bit signed int ...
- POJ 3784.Running Median
2015-07-16 问题简述: 动态求取中位数的问题,输入一串数字,每输入第奇数个数时求取这些数的中位数. 原题链接:http://poj.org/problem?id=3784 解题思路: 求取中 ...
- POJ 3784 Running Median (动态中位数)
题目链接:http://poj.org/problem?id=3784 题目大意:依次输入n个数,每当输入奇数个数的时候,求出当前序列的中位数(排好序的中位数). 此题可用各种方法求解. 排序二叉树方 ...
- POJ 3784 Running Median (模拟水过带翻译)
Description Moscow is hosting a major international conference, which is attended by n scientists fr ...
- HDU 3282 Running Median 动态中位数,可惜数据范围太小
Running Median Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...
- 【POJ 3784】 Running Median (对顶堆)
Running Median Description For this problem, you will write a program that reads in a sequence of 32 ...
- Running Median POJ - 3784 (对顶堆/优先队列 | 链表)
For this problem, you will write a program that reads in a sequence of 32-bit signed integers. After ...
- 【POJ3784】Running Median
Running Median Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3406 Accepted: 1576 De ...
- hdu 3282 Running Median
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3282 Running Median Description For this problem, you ...
随机推荐
- 0203 生成mysql的数据库的数据字典
原理 项目的数据库字典表是一个很重要的文档.通过此文档可以清晰的了解数据表结构及开发者的设计意图. 通常为了方便我都是直接在数据库中建表,然后通过工具导出数据字典. 在Mysql数据库中有一个info ...
- 安装mysql server5.5 到start service未响应解决方法
打开C盘,然后修改 "组织" => "查看"(如下图) 里面的 "隐藏受保护的操作系统文件" (系统这是会弹出警告,不 ...
- G. Repeat it
G. Repeat it time limit per test 2.0 s memory limit per test 64 MB input standard input output stand ...
- 将.py文件转化成.exe
机子上已经安装好python,且配置好环境变量 编写好xx.py文件 安装pywin32.此处一定注意pywin32有32位和64位之分.可以在命令提示符里输入python来查看python的版本以及 ...
- POJ 3393:Lucky and Good Months by Gregorian Calendar 年+星期 模拟
Lucky and Good Months by Gregorian Calendar Time Limit: 1000MS Memory Limit: 65536K Total Submissi ...
- s5pc100开发板网卡驱动的移植
相关软件下载地址:http://pan.baidu.com/s/16yo8Y fsc100开发板 交叉编译工具:arm-cortex_a8-linux-gnueabi-gcc 平台代码修改 vim ...
- 洛谷 三月月赛 B
搞出每一位与前一位的差,然后区间修改只是会影响区间的端点,所以只修改一下端点的值就好. %%%高一神犇线段树 #include<bits/stdc++.h> #define N 10000 ...
- 怎么更改Rstudio中的默认目录
方法一. 每次启动Rstudio之后,执行代码 setwd("F:/R/R_data") 默认目录就会修改为双引号内的位置路径. 方法二. 对Rstudio进行设置一次即可. ①点 ...
- sendgrid 批量发送邮件,收件栏只显示当前用户的方案
需求:批量发送邮件,用户可能看到其他用户的邮箱地址,之前用BBC发送,但问题是接收地址是同一个. 官方解决方案:https://sendgrid.kke.co.jp/docs/Tutorials/A_ ...
- kibana下载与安装
目录 简介 下载 安装 测试 简介 Kibana是一个为ElasticSearch 提供的数据分析的 Web 接口.可使用它对日志进行高效的搜索.可视化.分析等各种操作.安装之前有话说: 安装路径不要 ...