思路就是:
每次中位数的位置最多变一位,所以根据当前长度和新加入数与原来中位数大小的比对确定中位数位置的变化。
感觉没啥问题,就是 WA 了。
救救我吧,这么个水题调一晚上。
#include<bits/stdc++.h>
using namespace std;
multiset<int> st;
multiset<int>::iterator ans;
int n,a;
inline void add(int x){
st.insert(x);
if((st.size()&1)^1&&(x<*ans))
ans--;
if((st.size()&1)&&(x>*ans))
ans++;
return ;
}
char op[23];
int main(){
st.insert(-0x7f7f7f7f);
st.insert(0x7f7f7f7f);
ans=st.begin();
scanf("%d",&n);
while(n--){
scanf("%d",&a);
add(a);
}
scanf("%d",&n);
while(n--){
scanf("%s",op);
if(op[0]=='a'){
scanf("%d",&a);
add(a);
}
else
printf("%d\n",*ans);
}
return 0;
}