开始我想的是用multiset 和stack维护 但是发现 虽然multiset插入很方便 但是不能查询中值
这样就可以拿到17分了
查询中值最快的方法一定是数组下标 假如我们用数组代替multiset的话 唯一不方便的就是要让每次插入后序列都有序
每次排序肯定不行 考虑lower_bound操作 这样就能满足了 这个题目给我们的经验就是 数组加lowbound比multiset更优
// Murabito-B 21/04/23
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void solve() {
int n, x;
string s;
cin >> n;
vector<int> v, v1;
while (n--) {
cin >> s;
if (s == "Push") {
cin >> x;
v1.push_back(x);
auto it = lower_bound(v.begin(), v.end(), x);
v.insert(it, x);
} else if (s == "Pop") {
if (v1.size() == 0) cout << "Invalid\n";
else {
auto it = lower_bound(v.begin(), v.end(), v1[v1.size() - 1]);
v.erase(it);
cout << v1[v1.size() - 1] << "\n";
v1.pop_back();
}
} else {
if (v1.size() == 0) cout << "Invalid\n";
else {
if (v.size() & 1) cout << v[v.size() / 2] << '\n';
else
cout << v[v.size() / 2 - 1] << "\n";
}
}
}
}
int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
solve();
return 0;
}