multiset 60pts. 求大佬hack
查看原帖
multiset 60pts. 求大佬hack
526094
Wf_yjqd楼主2023/7/15 22:53

思路就是:

每次中位数的位置最多变一位,所以根据当前长度和新加入数与原来中位数大小的比对确定中位数位置的变化。

感觉没啥问题,就是 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);
    // printf("%d CA\n",st.size());
    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);
            // printf("%d Sherry\n",*ans);
        }
        else
            printf("%d\n",*ans);
    }
    return 0;
}
2023/7/15 22:53
加载中...