我是靠谱客的博主 能干睫毛,最近开发中收集的这篇文章主要介绍Running Median 对顶堆Running Median 对顶堆,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Running Median 对顶堆

题意:

给定一个数列,每次已经输入了奇数个数字的话,输出此时的中位数

思路:

对顶堆板子题

想象两个堆为一个三角形和一个倒三角形,组成的沙漏形状,即为对顶堆,两个堆相接之处则为答案

维护一个大根堆一个小根堆,保持这两个堆均分数组数据。询问时输出对顶即可

代码:

注意输出格式

#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
priority_queue<int>down;
priority_queue<int, vector<int>, greater<int>>up;//小根堆
void init() {
while (down.size())
{
down.pop();
}
while (up.size())
{
up.pop();
}
return;
}
void slv() {
init();
int n, m;
cin >> n >> m;
cout << n << (m + 1) / 2 << endl;
int cnt = 0;
int t;
for (int i = 1; i <= m; i++) {
cin >> t;
if (up.empty()) {
up.push(t);
}
else if (t >= up.top()) {
up.push(t);
}
else {
down.push(t);
}
if (up.size() > down.size() + 1) {
down.push(up.top());
up.pop();
}
if (up.size() < down.size()) {
up.push(down.top());
down.pop();
}
if (i & 1) {
cout << up.top();
cnt++;
if (cnt != 10) {
cout << " ";
}
else {
cout << "n";
cnt = 0;
}
}
}
if (cnt) {
cout << "n";
}
}
int main(void) {
int t;
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
cin >> t;
while (t--)
{
slv();
}
return 0;
}

最后

以上就是能干睫毛为你收集整理的Running Median 对顶堆Running Median 对顶堆的全部内容,希望文章能够帮你解决Running Median 对顶堆Running Median 对顶堆所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部