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 ...
随机推荐
- 【Spring】Spring中的Bean - 5、Bean的装配方式(XML、注解(Annotation)、自动装配)
Bean的装配方式 简单记录-Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)-Spring中的Bean 文章目录 Bean的装配方式 基于XML的装配 基于注解 ...
- 【Linux】sudo配置文件讲解
一.sudo执行命令的流程 将当前用户切换到超级用户下,或切换到指定的用户下, 然后以超级用户或其指定切换到的用户身份执行命令,执行完成后,直接退回到当前用户. 具体工作过程如下: 当用户执行sudo ...
- C语言------三目运算符(条件运算符)
今天在看C语言的时候看到了下面的代码(废话少说,直接上代码): #include <stdio.h> int main() {int max(); extern int A,B,C; // ...
- Hadoop 专栏 - MapReduce 入门
MapReduce的基本思想 先举一个简单的例子: 打个比方我们有三个人斗地主, 要数数牌够不够, 一种最简单的方法可以找一个人数数是不是有54张(传统单机计算); 还可以三个人各分一摞牌数各自的(M ...
- 1.2V升压5V和2.4V升压5V芯片,适用于镍氢电池产品
一节镍氢电池1.2V升压5V电路芯片,两节镍氢电池2.4V升压到5V的电源芯片 PW5100具有宽范围的输入工作电压,从很低的0.7V到5V电压. PW5100输出电压固定3V,3.3V,5V可选固定 ...
- 渗透测试中期--漏洞复现--MS08_067
靶机:Win2k3 10.10.10.130 攻击机:BT5 10.10.10.128 一:nmap 查看WinK3是否开放端口3389 开放3389方法:我的电脑->属性-&g ...
- Ubuntu源、Python虚拟环境及pip源配置
Ubuntu 命令行更改源 在修改source.list前,最好先备份一份 软件源的地址配置文件在 /etc/apt/sources.list 执行备份命令 sudo cp /etc/apt/sour ...
- gRPC Load Balancing
gRPC Load Balancing 翻译自:https://grpc.io/blog/grpc-load-balancing/ 这是gRPC负载均衡的第一篇,后续会给出基于golang XDS服务 ...
- (03)-Python3之--元组(tuple)操作
1.定义 元组的关键字:tuple 元组以()括起来,数据之间用 , 隔开.元组当中的数据,可以是任意类型.数值是可以重复的. 元组元素是 不可变的,顺序是 有序的. 例如: b = ("萝 ...
- E2.在shell中正确退出当前表达式
E2.在shell中正确退出当前表达式 优雅退出当前表达式 在shell里面输出复杂的多行表达时,经常由于少输入一个引号,一直无法退出当前的表达式求值,也没有办法终止它,以前只能通过两次Ctrl+C结 ...