Skip to content

M21509:序列的中位数

heap, http://cs101.openjudge.cn/practice/21509

思路:大顶堆+小顶堆

cpp
#include <iostream>
#include <queue>
#include <vector>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int num_count;  
    cin >> num_count;
    priority_queue<long long> lower_half;
    priority_queue<long long, vector<long long>, greater<long long>> upper_half;
    for (int i = 1; i <= num_count; ++i) {
        long long current_num; 
        cin >> current_num;
        lower_half.push(current_num);
        if (!upper_half.empty() && lower_half.top() > upper_half.top()) {
            long long temp = lower_half.top();
            lower_half.pop();
            upper_half.push(temp);

            temp = upper_half.top();
            upper_half.pop();
            lower_half.push(temp);
        }
        if (lower_half.size() > upper_half.size() + 1) {
            upper_half.push(lower_half.top());
            lower_half.pop();
        } else if (upper_half.size() > lower_half.size()) {
            lower_half.push(upper_half.top());
            upper_half.pop();
        }
        if (i % 2 == 1) {
            cout << lower_half.top() << endl;  
        }
    }

    return 0;
}