hdu3282 动态中位数(用堆实现)
来源:互联网 发布:golang channel 编辑:程序博客网 时间:2024/09/21 09:19
题意是求一个动态的中位数,用两个堆实现,一个是大根堆,一个是小根堆,且大根堆的元素个数等于小根堆的元素个数或者多一个,大根堆保存了比较小的前一半,小根堆保存了较大的后一半,每次求值的时候,取出大根堆的堆顶元素即可
#include<stdio.h>#include<string.h>#include<algorithm>#include<math.h>#include<vector>#include<map>#include<queue>#include <iostream>using namespace std;const int N=1e5+10;int n,m;int a[N];struct heap{int a[N];int num;bool (*op)(int,int);void clear(){num=0;}void insert(int x){ a[++num]=x; int t=num; while(t>1 && op(a[t],a[t/2])){ swap(a[t],a[t/2]); t/=2; }}int getTop(){return a[1];}int getSize(){return num;}int pop(){int res=a[1];swap(a[1],a[num]);num--;int t=1;while(t*2<=num){int l=t*2;if(l<num && op(a[l+1],a[l])) l++;if(op(a[l],a[t])){swap(a[l],a[t]);t=l;}else break;}return res;}}h1,h2;bool max(int a,int b){return a>b;}bool min(int a,int b){return a<b;}int main() { //freopen("aaa","r",stdin);int T;scanf("%d",&T);h1.op=max; h2.op=min;while(T--){int id;scanf("%d",&id);scanf("%d",&n);printf("%d %d\n",id,(n+1)/2);int num=0;h1.clear();h2.clear();for(int i=1;i<=n;i++){scanf("%d",a+i);if(i&1){if(h1.getSize()==0 || a[i]<=h2.getTop()){h1.insert(a[i]);}else{h1.insert(h2.pop());h2.insert(a[i]);}num++;printf("%d%c",h1.getTop(),(num==10 || i==n)?'\n':' ');if(num==10) num=0;}else{if(a[i]<=h1.getTop()){h2.insert(h1.pop());h1.insert(a[i]);}else{h2.insert(a[i]);}}}}return 0;}
0 0
- hdu3282 动态中位数(用堆实现)
- 牛客网 数据流中的中位数(用两个堆实现)
- 用最大堆和最小堆实现中位数查找
- hdu3282 Running Median(排序)
- 堆排序:动态数组求中位数
- 洛谷P1168 中位数(堆)
- POJ3784 Running Median 对顶堆维护动态中位数(思维)
- POJ 3784 Running Median 动态求中位数 堆
- POJ 3784 Running Median 动态求中位数 堆
- POJ 3784 对顶堆动态维护中位数 解题报告
- 用堆维护数组的中位数
- 寻找中位数(分治+双堆)
- [TJOI2010]中位数(优先队列,堆)
- Java实现用最大堆和最小堆查找中位数 Find median with min heap and max heap in Java
- |洛谷|堆|P1168 中位数
- hdu5249KPI动态中位数(两个set)
- 最大堆和最小堆求数据流中的中位数【java实现】
- 二叉堆,堆排序,STL优先队列的底层实现,剑指offer数据流中的中位数
- Educational Codeforces Round 2 A.Extract Numbers(模拟)
- 「锵锵三人行」只言片语
- HDOJ 2092 整数解
- 算法-蓝桥杯习题(5-1)
- VS的反汇编
- hdu3282 动态中位数(用堆实现)
- 【LeetCode-263】Ugly Number(C++)
- 题目1447:最短路
- Sicily 12986. An Odd Sum
- 原生js写的复选框的全选、不选、反选
- procedure_yhs_20160116
- unicode下 LPCTSTR 转换为const char*的方法
- Tomcat启动不成功提示:windows不能在本地计算机启动Apache Tomcat
- 16-1.6随笔