博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Luogu]中位数
阅读量:6233 次
发布时间:2019-06-21

本文共 736 字,大约阅读时间需要 2 分钟。

Description

Solution

一种神奇的做法:开一个大根堆和小根堆,保证大根堆比小根堆多1个元素,且大根堆堆顶元素比小根堆堆顶元素小,那么大根堆堆顶就是中位数。插入的时候用交换堆顶元素的方法维护一下这个性质就行。

Code

#include 
#include
const int N = 100010;int n, a[N];std::priority_queue
big;std::priority_queue
, std::greater
> small;int main() { scanf("%d", &n); for (int i = 1; i <= n; ++i) scanf("%d", &a[i]); int p = 1; big.push(a[p++]); printf("%d\n", big.top()); if (!n%2) n--; while (p < n) { int x = a[p++], y = a[p++]; if (x > y) std::swap(x, y); big.push(x); small.push(y); if (big.top() > small.top()) { int x = big.top(), y = small.top(); big.pop(); big.push(y); small.pop(); small.push(x); } printf("%d\n", big.top()); } return 0;}

转载于:https://www.cnblogs.com/wyxwyx/p/lg1168.html

你可能感兴趣的文章
权限管理越来越复杂
查看>>
C# 多线程窗体的创建
查看>>
开始编写Golang代码
查看>>
Linux 小知识翻译 - 「协议(protocol)」
查看>>
在JavaScript中对HTML进行反转义
查看>>
postgresql系统函数
查看>>
Javascript 中的变量作用域问题
查看>>
chrome浏览器关闭标签页面
查看>>
创建注记图层要素
查看>>
C++11 正则表达式——基础知识介绍
查看>>
jquery 日期+时间 date & time 插件
查看>>
【读书笔记《Android游戏编程之从零开始》】8.Android 游戏开发常用的系统控件(系统控件常见问题)...
查看>>
jsoncpp v0.5中的一个bug
查看>>
DNS报文格式(RFC1035)
查看>>
停下来,等等灵魂(二)
查看>>
在Android中实现service动态更新UI界面
查看>>
找出数字在已排序数组中出现的次数
查看>>
Linux驱动学习笔记(6)信号量(semaphore)与互斥量(mutex)【转】
查看>>
DotNET企业架构应用实践-系列目录
查看>>
iOS开发-UITextView根据内容自适应高度
查看>>