思路:
用stack模拟输入输出,用vector每次按顺序插入值,用lower_bound()函数
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e4+10;
const int INF=0x3f3f3f3f;
#define fir first
#define sec second
int main()
{
int n;
cin>>n;
stack<int>st;
vector<int>vc;
vector<int>::iterator it;
while(n--){
string s;
cin>>s;
int x;
if(s[1]=='o'){
if(vc.size()==0) cout<<"Invalid"<<endl;
else{
it=lower_bound(vc.begin(),vc.end(),st.top());
cout<<(*it)<<endl;
vc.erase(it);
st.pop();
}
}
else if(s[1]=='u'){
cin>>x;
it=lower_bound(vc.begin(),vc.end(),x);
vc.insert(it,x);
st.push(x);
}
else{
int k=vc.size();
if(!k) cout<<"Invalid"<<endl;
else if(k%2) cout<<vc[k/2]<<endl;
else cout<<vc[(k/2)-1]<<endl;
}
}
return 0;
}