社区讨论

C++ 大于号灵异

学术版参与者 4已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@mhiyteaa
此快照首次捕获于
2025/11/03 17:56
4 个月前
此快照最后确认于
2025/11/03 17:56
4 个月前
查看原帖
这是一个经典的对顶堆维护中位数
CPP
#include <iostream>
#include <queue>

using namespace std;

priority_queue<int> q1;
priority_queue<int, vector<int>, greater<int>> q2;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    int n;
    cin >> n;

    for (int i = 1; i <= n; i++)
    {
        int a;
        cin >> a;
        if (q1.empty() || a <= q1.top())
            q1.push(a);
        else
            q2.push(a);
        // if (q1.size() - q2.size() > 1)
        if (q1.size() > q2.size() + 1)
        {
            q2.push(q1.top());
            q1.pop();
        }
        else if (q1.size() < q2.size())
        {
            q1.push(q2.top());
            q2.pop();
        }
        if (i % 2 == 1)
            cout << q1.top() << "\n";
    }

    return 0;
}
但是,为什么注掉的部分是错的,移个项就是对的?

回复

4 条回复,欢迎继续交流。

正在加载回复...