Skip to content

对顶堆维护中位数 ​

cpp
void solve(){
    int n=0,x;
    priority_queue<int> big;
    priority_queue<int,vector<int>,greater<int>> small;
    while(cin>>x,x){
        if(x==-1){
            cout<<big.top()<<"\n";
            big.pop();
            if(n%2==0){
                big.push(small.top());
                small.pop();
            }
            n--;
        }
        else{
            if(n%2==0){
                if(small.empty()||small.top()>=x)big.push(x);
                else{
                    small.push(x);
                    big.push(small.top());
                    small.pop();
                }
            }
            else{
                if(big.top()<=x)small.push(x);
                else{
                    big.push(x);
                    small.push(big.top());
                    big.pop();
                }
            }
            n++;
        }
    }
}