题意:

按照顺序给你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 优先队列的使用的更多相关文章

  1. hdu 3282 Running Median

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3282 Running Median Description For this problem, you ...

  2. HDU 3282 Running Median 动态中位数,可惜数据范围太小

    Running Median Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...

  3. hdu 5306 优先队列

    用到优先队列 #include<iostream> #include<string> #include<algorithm> #include<cstdio& ...

  4. HDU 4006 优先队列

    The kth great number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Oth ...

  5. hdu 5818 (优先队列) Joint Stacks

    题目:这里 题意: 两个类似于栈的列表,栈a和栈b,n个操作,push a x表示把数x放进a栈的栈底,pop b 表示将栈b的栈顶元素取出输出,并释放这个栈顶元素,merge a b表示把后面的那个 ...

  6. hdu 4302 优先队列

    进一步学习了优先队列的用法 题意:一只小动物在直线上走,起始位置为零,之后会出现食物,动物要去距离自己最短的食物那,若两边的食物距离相等,则选择之前走的方向的食物 0 x,代表x的位置出现了食物,1代 ...

  7. hdu 4393 优先队列

    用优先队列储存每个人的初始距离和编号,每轮求出最快的人,然后pop掉 一开始想遍历队列的,后来发现队列没办法遍历,汗-_-! 题意,给几个第一秒冲出的距离和以后速度,求每秒后最前面人的编号,求完后最前 ...

  8. HDU 1058 优先队列or堆

    本来应当是一道优先队列或者堆的题 因为每个数都应该是已经得到的数*2 *3 *5 *7而得到的 但是 2*7 大于 3*2 这就必须保证每次取得都是没有拿过的最小的数 但是它主动降低难度在样例里卖了个 ...

  9. hdu 2258 优先队列

    Continuous Same Game (1) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...

随机推荐

  1. Jenkins上实现Python + Jenkins + Allure Report 接口自动化测试持续集成,最终测试报告用allure-report进行展示

    项目介绍 接口功能测试应用:http://www.weather.com.cn/data/cityinfo/<city_code>.html 测试功能:获取对应城市的天气预报 源码:Pyt ...

  2. 拍摄、剪辑vlog的思路

    这篇文章是看了很多狂阿弥_ 的作品后 产生的一些小小总结.这些技法只是锦上添花,阿弥作品真正好的地方在于他细腻的情感,真实的对白,和打动人心的满分作文. 优秀的Vlog ,在于它和观众产生的情感共鸣. ...

  3. Redis 5 配置 Redis sentinel(哨兵模式)

    先了解一下哨兵都 做了什么工作:Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: * 监控(Monitoring): Sentin ...

  4. QT串口助手(三):数据接收

    作者:zzssdd2 E-mail:zzssdd2@foxmail.com 一.前言 开发环境:Qt5.12.10 + MinGW 实现的功能 串口数据的接收 ascii字符形式显示与hex字符形式显 ...

  5. 阿里云OSS对象存储服务(一)

    一.开通"对象存储OSS"服务 申请阿里云账号 实名认证 开通"对象存储OSS"服务 进入管理控制台 二.控制台使用 1.创建Bucket 命名:guli-fi ...

  6. SUGA

    愿试炼的终点是花开万里 愿以渺小启程伟大结束 ----闵玧其

  7. 30分钟带你了解「消息中间件」Kafka、RocketMQ

    消息中间件的应用场景 主流 MQ 框架及对比 说明 Kafka 优点 Kafka 缺点 RocketMQ Pulsar 发展趋势 各公司发展 Kafka Kafka 是什么? Kafka 术语 Kaf ...

  8. 开心!再也不用担心 IntelliJ IDEA 试用过期了

    背景 前段时间 Review 团队小伙伴代码,发现当他把鼠标挪到一个方法上时,就自动显示了该方法的所有注释信息,像下图这样,他和我用的 IDE 都是 IntelliJ IDEA. 而我还按古老的方式, ...

  9. 01. struts2介绍

    struts2优点 与Servlet API 耦合性低.无侵入式设计 提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能 支持多种表现层技术,如:JSP.freeMarker.veloc ...

  10. feign使用okHttpClient,调用原理

    最近项目中 spring cloud 用到http请求,使用feign,配置okhttp,打算配置一下就直接使用,不过在压测与调优过程中遇到一些没有预测到的问题,附上排查与解析结 yml.pom配置 ...