106. 动态中位数【经典 / 对顶堆】
用对顶堆来维护。一个大根堆,一个小根堆。
大根堆存前一半的数据,小根堆存后一半的数据。
需要满足这样的一个条件:
- 大根堆最大的数<=小根堆最小的数
- 大根堆的数量最多比小根堆的数量多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. 动态中位数【经典 / 对顶堆】相关推荐
- 【POJ3784】Running Median(中位数,对顶堆)
description 输入M个数,当已输入的个数为奇数个时输出此时的中位数. 一共有M/2+1个中位数要输出,每一行10个. solution 维护两个优先队列. 大根堆q1维护比当前中位数小的元素 ...
- 神奇的东西——对顶堆
一.定义 就是一个大根堆与一个小根堆的结合,可以用来解决动态区间第k大的问题.可以通过下图来理解. 那么我们如何建一个对顶堆呢? 上文说到,对顶堆是一种基于大根堆和小根堆的数据结构.最开始的时 ...
- BZOJ1112洛谷P3466 [POI2008]KLO-Building blocks(砖头)[对顶堆学习笔记]
坑爹的BZOJ因为不让 输出方案我WA了若干次 据说正解是平衡树/线段树,我不会,就用了个新东西->对顶堆 对顶堆 一个维护中位数的东西,我们通过维护两个堆,来维所有数的中位数 (显然我们可以排 ...
- nssl1477-赛【对顶堆,贪心】
正题 题目大意 nnn个物品,有两个人,每个人有一些喜欢的物品. 选mmm个物品,至少选择kkk个第一个人喜欢的和kkk个第二个人喜欢的物品 解题思路 首先我们必定是选最小的 我们从小到大枚举选择多少 ...
- NOI.AC-保镖【贪心,对顶堆】
正题 题目链接:http://noi.ac/contest/266/problem/795 题目大意 nnn个人第iii个巡逻一次aia_iai秒,休息至少bib_ibi秒. 要求 任意时刻都有人 ...
- LeetCode 480. 滑动窗口中位数(大小堆升级版+set实现)
1. 题目 中位数是有序序列最中间的那个数. 如果序列的大小是偶数,则没有最中间的数:此时中位数是最中间的两个数的平均数. 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) ...
- LeetCode 295. 数据流的中位数(大小堆)
文章目录 1. 题目 2. 大小堆解题 1. 题目 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 ...
- 【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 )
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- 【lintcode】树形数据结构之Maxtree, Tree iterator, remove bst node, 优先队列之动态中位数Median, 矩阵dfs之word search II,最大连
解析 max ksubarray sum: 最大和 of 连续子序列 => 最大和 of k份连续子序列 属于dp,30行代码搞定,注意一些边界. substr diff: 无queu ...
最新文章
- 计算机科学与技术python方向是什么意思-第一模块·开发基础-第1章 Python基础语法...
- C++ int与string类型相互转化
- 芦溪中学2021高考成绩查询,三台县芦溪中学2021年招生简章
- android 判断ip地址合法
- C#使用StreamReader类读取文件文件
- ie11浏览器可以下载java吗_解析:WindowsXP系统能否安装IE11浏览器
- linux 内容替换 注释,为让 Linux 代码注释更加和谐 有人提议用“拥抱”替换 F**k...
- 关于装配学校计算机教室报告,计算机室工作计划
- 【Spring 工厂】工厂设计模式、第一个Spring程序细节分析、整合日志框架
- 1044. 火星数字(20)-PAT乙级真题
- jQuery的几个例子流程讲解
- hashmap什么时候由链表转为红黑树
- echarts 生成 迁徙图_Echarts世界级迁徙图
- linux终端无法输入大写字母,linux不能打大写字母
- html如何让英文自动换行,HTML如何让英文自动换行不断词
- python语料库_NLPPython笔记——语料库
- curl php 模拟来源_php采用curl实现伪造IP来源的方法
- 创建两个文本框,一个按钮。第 1 个文本框绑定任意键事件,敲击键盘任意可显示字符,在交互窗口中显示该字符;
- 计算机网络——Packet Trace路由器配置——课程设计
- 11-Air-合宙820-车牌识别2-百度智能云
热门文章
- Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so.
- 拖延不是你的锅,全是基因惹的祸
- 钢琴演奏:舒伯特的小夜曲 --- 女儿的钢琴学习
- Appstore|IPA
- OpenSession与getCurrentSession的区别
- fekit前端代码模块化工具
- 数据结构之表(5)栈的顺序实现
- 蓝牙4.0技术分析1-广播者角色
- MATLAB之相关函数
- Boost Asio总结(15)class basic_stream_socket