用对顶堆来维护。一个大根堆,一个小根堆。
大根堆存前一半的数据,小根堆存后一半的数据。
需要满足这样的一个条件:

  • 大根堆最大的数<=小根堆最小的数
  • 大根堆的数量最多比小根堆的数量多1,这样大根堆的堆顶就是中位数
#include<bits/stdc++.h>
using namespace std;
int t,id,n;
int main(void)
{cin>>t;while(t--){cin>>id>>n;printf("%d %d\n",id,(n+1)/2);priority_queue<int>maxv_heap;//存前一半数据priority_queue<int,vector<int>,greater<int>> minv_heap;//存后一半数据int cnt=0;for(int i=1;i<=n;i++){int x; cin>>x;if(maxv_heap.empty() || x<=maxv_heap.top()) maxv_heap.push(x);else minv_heap.push(x);if(maxv_heap.size()>minv_heap.size()+1) minv_heap.push(maxv_heap.top()),maxv_heap.pop();if(maxv_heap.size()<minv_heap.size())maxv_heap.push(minv_heap.top()),minv_heap.pop();if(i&1){printf("%d ",maxv_heap.top());cnt++;if(cnt&&(cnt%10==0)) puts("");}}if(cnt%10) puts("");}return 0;
}

106. 动态中位数【经典 / 对顶堆】相关推荐

  1. 【POJ3784】Running Median(中位数,对顶堆)

    description 输入M个数,当已输入的个数为奇数个时输出此时的中位数. 一共有M/2+1个中位数要输出,每一行10个. solution 维护两个优先队列. 大根堆q1维护比当前中位数小的元素 ...

  2. 神奇的东西——对顶堆

    一.定义   就是一个大根堆与一个小根堆的结合,可以用来解决动态区间第k大的问题.可以通过下图来理解.  那么我们如何建一个对顶堆呢?  上文说到,对顶堆是一种基于大根堆和小根堆的数据结构.最开始的时 ...

  3. BZOJ1112洛谷P3466 [POI2008]KLO-Building blocks(砖头)[对顶堆学习笔记]

    坑爹的BZOJ因为不让 输出方案我WA了若干次 据说正解是平衡树/线段树,我不会,就用了个新东西->对顶堆 对顶堆 一个维护中位数的东西,我们通过维护两个堆,来维所有数的中位数 (显然我们可以排 ...

  4. nssl1477-赛【对顶堆,贪心】

    正题 题目大意 nnn个物品,有两个人,每个人有一些喜欢的物品. 选mmm个物品,至少选择kkk个第一个人喜欢的和kkk个第二个人喜欢的物品 解题思路 首先我们必定是选最小的 我们从小到大枚举选择多少 ...

  5. NOI.AC-保镖【贪心,对顶堆】

    正题 题目链接:http://noi.ac/contest/266/problem/795 题目大意 nnn个人第iii个巡逻一次aia_iai​秒,休息至少bib_ibi​秒. 要求 任意时刻都有人 ...

  6. LeetCode 480. 滑动窗口中位数(大小堆升级版+set实现)

    1. 题目 中位数是有序序列最中间的那个数. 如果序列的大小是偶数,则没有最中间的数:此时中位数是最中间的两个数的平均数. 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) ...

  7. LeetCode 295. 数据流的中位数(大小堆)

    文章目录 1. 题目 2. 大小堆解题 1. 题目 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 ...

  8. 【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 )

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  9. 【lintcode】树形数据结构之Maxtree, Tree iterator, remove bst node, 优先队列之动态中位数Median, 矩阵dfs之word search II,最大连

    解析 max ksubarray sum:  最大和 of 连续子序列 =>   最大和 of  k份连续子序列 属于dp,30行代码搞定,注意一些边界. substr diff:  无queu ...

最新文章

  1. 计算机科学与技术python方向是什么意思-第一模块·开发基础-第1章 Python基础语法...
  2. C++ int与string类型相互转化
  3. 芦溪中学2021高考成绩查询,三台县芦溪中学2021年招生简章
  4. android 判断ip地址合法
  5. C#使用StreamReader类读取文件文件
  6. ie11浏览器可以下载java吗_解析:WindowsXP系统能否安装IE11浏览器
  7. linux 内容替换 注释,为让 Linux 代码注释更加和谐 有人提议用“拥抱”替换 F**k...
  8. 关于装配学校计算机教室报告,计算机室工作计划
  9. 【Spring 工厂】工厂设计模式、第一个Spring程序细节分析、整合日志框架
  10. 1044. 火星数字(20)-PAT乙级真题
  11. jQuery的几个例子流程讲解
  12. hashmap什么时候由链表转为红黑树
  13. echarts 生成 迁徙图_Echarts世界级迁徙图
  14. linux终端无法输入大写字母,linux不能打大写字母
  15. html如何让英文自动换行,HTML如何让英文自动换行不断词
  16. python语料库_NLPPython笔记——语料库
  17. curl php 模拟来源_php采用curl实现伪造IP来源的方法
  18. 创建两个文本框,一个按钮。第 1 个文本框绑定任意键事件,敲击键盘任意可显示字符,在交互窗口中显示该字符;
  19. 计算机网络——Packet Trace路由器配置——课程设计
  20. 11-Air-合宙820-车牌识别2-百度智能云

热门文章

  1. Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so.
  2. 拖延不是你的锅,全是基因惹的祸
  3. 钢琴演奏:舒伯特的小夜曲 --- 女儿的钢琴学习
  4. Appstore|IPA
  5. OpenSession与getCurrentSession的区别
  6. fekit前端代码模块化工具
  7. 数据结构之表(5)栈的顺序实现
  8. 蓝牙4.0技术分析1-广播者角色
  9. MATLAB之相关函数
  10. Boost Asio总结(15)class basic_stream_socket