HDU - 3282 优先队列的使用
题意:
按照顺序给你n个数,当数的数量是奇数的时候就输出它们的中位数
题解:
优先队列默认是大顶堆,即priority_queue.top()是这个队列中的最大值
那么我们就可以先创造一个大顶堆优先队列qmax,和一个小顶堆qmin
qmin里面放的是大于等于中位数的数,qmax里面放的是比中位数小的数
因为qmin是小顶堆,那么qmin.top()肯定就是中位数
(上面的话是在中位数的前提下)
代码:
1 #include <bits/stdc++.h>
2 using namespace std;
3 int main()
4 {
5 int t;
6 scanf("%d",&t);
7 while(t--)
8 {
9 priority_queue<int > qmax; //大顶堆
10 priority_queue<int ,vector<int > ,greater <int > >qmin; //小顶堆
11 int cnt;
12 int n;
13 scanf("%d%d",&cnt,&n);
14 printf("%d %d\n",cnt,(n/2+1));
15 for(int i=1;i<=n;i++)
16 {
17 int mid;
18 scanf("%d",&mid);
19 if(qmin.size()==0)
20 qmin.push(mid);
21 else
22 {
23 if(mid>qmin.top())
24 qmin.push(mid);
25 else qmax.push(mid);
26 }
27 while(qmin.size()!=qmax.size() && qmin.size()!=qmax.size()+1) //这两个条件任意一个不满足就要跳出来
28 {
29 if(qmax.size()>qmin.size())
30 {
31 int x=qmax.top();
32 qmax.pop();
33 qmin.push(x);
34 }
35 else
36 {
37 int x=qmin.top();
38 qmin.pop();
39 qmax.push(x);
40 }
41 }
42 /*
43 经过上面的while处理后,qmin里面放的是大于等于中位数的数,qmax里面放的是比中位数小的数
44 因为qmin是小顶堆,那么qmin.top()肯定就是中位数
45 (上面的话是在中位数的前提下)
46 */
47 if(i&1)
48 cout << qmin.top();
49 if((i+1)%20==0||i==n)
50 cout << endl;
51 else if(i&1)
52 cout << " ";
53 }
54 }
55 return 0;
56 }
HDU - 3282 优先队列的使用的更多相关文章
- hdu 3282 Running Median
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3282 Running Median Description For this problem, you ...
- HDU 3282 Running Median 动态中位数,可惜数据范围太小
Running Median Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...
- hdu 5306 优先队列
用到优先队列 #include<iostream> #include<string> #include<algorithm> #include<cstdio& ...
- HDU 4006 优先队列
The kth great number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Oth ...
- hdu 5818 (优先队列) Joint Stacks
题目:这里 题意: 两个类似于栈的列表,栈a和栈b,n个操作,push a x表示把数x放进a栈的栈底,pop b 表示将栈b的栈顶元素取出输出,并释放这个栈顶元素,merge a b表示把后面的那个 ...
- hdu 4302 优先队列
进一步学习了优先队列的用法 题意:一只小动物在直线上走,起始位置为零,之后会出现食物,动物要去距离自己最短的食物那,若两边的食物距离相等,则选择之前走的方向的食物 0 x,代表x的位置出现了食物,1代 ...
- hdu 4393 优先队列
用优先队列储存每个人的初始距离和编号,每轮求出最快的人,然后pop掉 一开始想遍历队列的,后来发现队列没办法遍历,汗-_-! 题意,给几个第一秒冲出的距离和以后速度,求每秒后最前面人的编号,求完后最前 ...
- HDU 1058 优先队列or堆
本来应当是一道优先队列或者堆的题 因为每个数都应该是已经得到的数*2 *3 *5 *7而得到的 但是 2*7 大于 3*2 这就必须保证每次取得都是没有拿过的最小的数 但是它主动降低难度在样例里卖了个 ...
- hdu 2258 优先队列
Continuous Same Game (1) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
随机推荐
- Nginx 路由转发和反向代理 location 配置
Nginx 配置的三种方式 第一种直接替换 location 匹配部分 第二种 proxy_pass 的目标地址,默认不带 /,表示只代理域名,url 和参数部分不会变(把请求的 path 拼接到 p ...
- 安装percona-toolkit
http://www.percona.com/software/percona-toolkityum -y install perl-DBIyum -y install perl-DBD-mysqly ...
- SAP中的密码输入框
在SAP中的密码输入框,可分为两种情况: 1.用selection语句书写的选择屏幕上的密码输入框 实现的方式就是在AT SELECTION-SCREEN OUTPUT事件中写入如下代码: LOOP ...
- kafka(三)原理剖析
一.生产者消息分区机制原理剖析 在使用Kafka 生产和消费消息的时候,肯定是希望能够将数据均匀地分配到所有服务器上.比如很多公司使用 Kafka 收集应用服务器的日志数据,这种数据都是很多的,特别是 ...
- HTML基础复习2
6.表格 6.1建立表格: 表格由<table></table>标签来定义 每行由<tr></tr>来定义,每行被分割为若干单元格,由<td> ...
- Python数据模型与Python对象模型
数据模型==对象模型 Python官方文档说法是"Python数据模型",大多数Python书籍作者说法是"Python对象模型",它们是一个意思,表示&quo ...
- VGA调试心得
以前自己调试过视频信号,无非就时钟加行场同步加数据线,如果视频信号出问题,第一看现象,第二测频率,反正出问题不是消隐信号出问题,就是时钟频率出问题.通过这种方式也调试成功过几个显示屏,然后就以为自己对 ...
- 超精讲-逐例分析 CSAPP:实验2-Bomb!(下)
好了话不多说我们书接上文继续来做第二个实验下面是前半部分实验的连接 5. 第五关 首先感觉应该是个递归问题 /* Round and 'round in memory we go, where we ...
- mysqldump导出数据库导入数据库
使用mysqldump命令导出数据库,格式如下,请按实际要求对参数进行替换: mysqldump -u 用户名 -p 数据库名 > 导出的文件名 比如导出数据库business_db: mysq ...
- mybatis框架整合及逆向工程
mybatis框架整合及逆向工程 一.三大框架整合 整合SSM框架 1.导入pom文件 1.导入spring的pom依赖 <?xml version="1.0" enco ...