106. 动态中位数

这道题目要求在读入整数序列时,当序列长度为奇数时输出中位数。由于每次排序不可行,解决方案是利用大根堆和小根堆构成的对顶堆来在线维护中位数。当堆不平衡时,将大堆的堆顶元素移至小堆,确保中位数始终正确。注意输入输出格式,避免格式错误。
摘要由CSDN通过智能技术生成

在这里插入图片描述

题意:

依次读入一个整数序列,每当已经读入的整数个数为奇数时,输出已读入的整数构成的序列的中位数。

思路:

这道题出现在排序这个小标题下,一开始读完以为挺水的,但是分析复杂度发现每次都排个序取中间的复杂度(n2logn),并不可行,所以需要用到一个可以在线维护中位数的数据结构,就是堆啦,用大根堆和小根堆组成一个对顶堆,那么中位数就是两个堆种大的那个堆里的堆顶,当两个堆的数量不一致时将大的那个堆的堆顶弹出压至小的那个堆里遇到奇数就输出堆顶即可。这题注意输入和输出的格式,被卡了一发!

AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5+10;
priority_queue<int> q1; //大根堆
priority_queue<int, vector<int>, greater<int> > q2; //小根堆 
void insert(int x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值