嗯...

题目链接:https://www.luogu.org/problem/P1168

这道题暴力是肯定不行的,所以说要用优先队列来维护...

思路:

定义一个大根堆,一个小根堆,首先将第一个数随便放进一个堆(这里我们把它放入小根堆),然后再看下一个数,如果这个数比小根堆的堆顶大,那么就把它放入小根堆,否则将它放入大根堆。注意大小根堆的元素个数不能超过2(即不能>1),如果超过,则将元素多的那个堆的堆顶元素压入另一个堆,这样我们就维护了一个类似单调递增的序列,而这道题又比较水,只讨论了奇数个元素的情况,所以最终的答案就是元素较多的堆的堆顶。(下面附一张图,但我感觉不是很好,其实就是一个单调递增的序列...

细节:

第28行到第38行不能写成:

if(q1.size() - q2.size() > 1){ q2.push(q1.top()) ; q1.pop(); }

 if(q2.size() - q1.size() > 1){ q1.push(q2.top()); q2.pop(); }

这样的话在pop的之后改变了size的大小...在执行下一条语句还可能合法,然后会....

AC代码:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<queue>
 4 #include<cmath>
 5
 6 using namespace std;
 7
 8 priority_queue <int> q1;
 9 priority_queue<int, vector<int>, greater<int> > q2;
10 int n, a;
11
12 int main(){
13     scanf("%d", &n);
14     for(int i = 1; i <= n; i++){
15         scanf("%d", &a);
16         if(i == 1){
17             printf("%d\n", a);
18             q2.push(a);
19             continue;
20         }
21         else{
22             if(a < q2.top()) q1.push(a);
23             else if(a > q2.top()) q2.push(a);
24             else{
25                 if(q1.size() < q2.size()) q1.push(a);
26                 else q2.push(a);
27             }
28             if(q1.size() - q2.size() > 1 || q2.size() - q1.size() > 1){
29                 if(q1.size() > q2.size()){
30                     q2.push(q1.top()) ;
31                     q1.pop();
32                 }
33                 else{
34                     q1.push(q2.top());
35                     q2.pop();
36                 }
37             }
38         }
39         if(i % 2 && q2.size() > q1.size()) printf("%d\n", q2.top());
40         else if(i % 2 && q1.size() > q2.size()) printf("%d\n", q1.top());
41     }
42     return 0;
43 }

AC代码

转载于:https://www.cnblogs.com/New-ljx/p/11285004.html

洛谷 P1168 中位数(优先队列)相关推荐

  1. [洛谷] P1168 中位数

    题目描述 给出一个长度为NN的非负整数序列 AiA_iAi​,对于所有 1≤k≤(N+1)/21≤k≤(N+1)/21≤k≤(N+1)/2,输出 A1A_1A1​, A1∼A3A_1 \sim A_3 ...

  2. 洛谷P1168 中位数

    题目描述 给出一个长度为NN的非负整数序列A_iAi​,对于所有1 ≤ k ≤ (N + 1) / 21≤k≤(N+1)/2,输出A_1, A_1 \sim A_3, -,A_1 \sim A_{2k ...

  3. AC日记——中位数 洛谷 P1168

    题目描述 给出一个长度为N的非负整数序列A[i],对于所有1 ≤ k ≤ (N + 1) / 2,输出A[1], A[2], -, A[2k - 1]的中位数.[color=red]即[/color] ...

  4. 洛谷or牛客数据结构+算法

    栈思想:先进后出 tips:栈里能放下标就放下标 (牛客)小c的计事本(直接用stack可以简化代码,且不会被自己绕晕,当时没意识到) (牛客)吐泡泡(没意识到用栈),(牛客)好串 1.后缀表达式(栈 ...

  5. 洛谷 Golden Sword(dp,优先队列优化【含板子】)|| 补充练习:洛谷 跳房子

    题目链接: 「SWTR-03」Golden Sword - 洛谷 思路: 设表示放第i个原料,锅里共有 j 个时的耐久度之和. 容易知道dp方程为,其中 这样就可以写出暴力dp的代码如下:(需要枚举i ...

  6. 升序堆和降序堆(优先队列) 洛谷1801

    1 // 洛谷1801 2 // 一个升序堆,一个降序堆 3 // 降序堆维护序列的前i个最小值 4 // 插如元素的时候,如果x小于降序堆最大值,则替换,并将最大值插入升序堆:否则,直接插入升序堆 ...

  7. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  8. 洛谷P1246C语言,codevs1246 丑数

    题目描述 Description 对于一给定的素数集合 S = {p1, p2, ..., pK}, 来考虑那些质因数全部属于S 的数的集合.这个集合包括,p1, p1p2, p1p1, 和 p1p2 ...

  9. 信息学奥赛一本通 1233:接水问题 | 1950:【10NOIP普及组】接水问题 | OpenJudge NOI 1.9 15 | 洛谷 P1190 [NOIP2010 普及组] 接水问题

    [题目链接] ybt 1233:接水问题 ybt 1950:[10NOIP普及组]接水问题 OpenJudge NOI 1.9 15:接水问题 洛谷 P1190 [NOIP2010 普及组] 接水问题 ...

  10. 洛谷OJ上的A+B花(zhuang)式(bi)解法

    转眼间快到了8月,一想自己都毕业好久了,很怀念曾经在各大OJ上刷题的时光,今天无意在一个算法群里看到最近有个叫洛谷的oj网站貌似蛮火的,于是注册了一个下进去看一看,顺手打开了A+B problem,然 ...

最新文章

  1. Java 集合系列(3): fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)...
  2. REST 101开发人员专用
  3. winform的ftp方式上传
  4. shop++源码反编译----随笔
  5. 小程序开发之单页面生命周期
  6. 电脑c语言翻译器,C语言window--在线翻译器.doc-资源下载人人文库网
  7. 基于R语言的Meta分析(全流程、不确定性分析)方法与Meta机器学习
  8. 计算机应用教研室工作计划,高校教研室工作计划
  9. 数字图像处理合集终章——车流量统计(后附源码)
  10. 新版Android使用微桌面,微桌面是什么?微信正开发安卓“微桌面”
  11. 【Java】NIO 仿照zookeeper 写的 nio客户端
  12. Linux 常用的一些命令
  13. ubuntu18.04系统无法正常连接网络解决办法
  14. css层叠样式的使用,CSS层叠样式表——使用CSS样式的方法
  15. 设计模式之9 - 装饰模式Decorator
  16. ceph 数据恢复机制_ceph数据恢复(成功率相当高)
  17. BZOJ 3265 志愿者招募加强版 单纯形
  18. WeX5 V3.6 正式版核心特性
  19. 固定资产管理系统(论文+PPT+源码)
  20. ubuntu下改变桌面图标大小方法

热门文章

  1. 六石管理学:谈谈工作技能培训
  2. 几万字的博文,你自己会看吗
  3. 全网首发:怎样加快android doubango的编译速度?
  4. 给龙芯的OpenJDK8升级
  5. JAVA对象,直接新建跟反射新建,有区别
  6. 编译OpenJDK8:CreateJars.gmk/BuildJdk.gmk/Main.gmk/错误
  7. 统计表明,睡懒觉迟到早退的人特别有创造力,这是真的吗?
  8. 飞机上一旅客突然收到生日蛋糕,是个小惊喜
  9. 把c的char数组转换为python image的代码
  10. 管理感悟:宁可五个阶段做三个月,绝不一个阶段做二个月