在有序容器v中插入元素使其仍有序 二分
删除同理
v.erase(lower_bound(v.begin(),v.end(),k));
v.insert(lower_bound(v.begin(),v.end(),c),c);
此题一个是栈 一个vector维护中间值即可
#include<bits/stdc++.h>
using namespace std;
map<int,int>mp;
const int maxn=305;
//bool number[maxn + 5];
int n,m,sum,cnt;
#define PI 3.141592653
typedef long long ll;
ll dp[100000];
//int v[100000];
int flag=0,ans;
vector<int>v;
stack<int>s;
int main(){
cin>>n;
while(n--){
string ks; cin>>ks;
if(ks=="Pop"){
if(s.size()==0){
cout<<"Invalid"<<endl;
}else{
int k=s.top();s.pop();v.erase(lower_bound(v.begin(),v.end(),k));
cout<<k<<endl;
}
}else if(ks=="Push"){
int c; cin>>c;
s.push(c); v.insert(lower_bound(v.begin(),v.end(),c),c);
}else{
if(!s.size()){
cout<<"Invalid"<<endl;
}else{
int c= s.size();
cout<<v[c/2-(c%2==0?1:0)]<<endl;
}
}
}
return 0;
}