题意:
依次读入一个整数序列,每当已经读入的整数个数为奇数时,输出已读入的整数构成的序列的中位数。
思路:
这道题出现在排序这个小标题下,一开始读完以为挺水的,但是分析复杂度发现每次都排个序取中间的复杂度(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