社区讨论
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 条回复,欢迎继续交流。
正在加载回复...