题解 | #Running Median#

Running Median

https://ac.nowcoder.com/acm/problem/50940

一定要记得关流! AC代码+注释如下:

#include<bits/stdc++.h>
using namespace std;
//维持一个大根堆,一个小根堆,其中大根堆的顶要小于等于小根堆的顶

int main(){
    ios::sync_with_stdio(false);//关流
    cin.tie(0);cout.tie(0);
    int T;cin>>T;//T组样例
    while(T--){
        priority_queue<int>qup;    //默认大根堆
        priority_queue<int,vector<int>,greater<int>>qdown;//小根堆
        int n,m;cin>>n>>m;//输入
        cout<<n<<' '<<(m+1)/2<<'\n';//输出格式
        for(int i=1;i<=m;i++){
            int x;cin>>x;
            
            if(i%2){//如果为奇数入堆并且维护qdown的最小值大于qup的最大值
                qup.push(x);
                while(!qdown.empty()&&qdown.top()<qup.top()){
                    int t1=qdown.top(),t2=qup.top();
                    qdown.pop();qup.pop();
                    qdown.push(t2);qup.push(t1);
                }
                cout<<qup.top()<<' ';
                if((i+1)/2%10==0)cout<<'\n';//注意格式
            }
            else qdown.push(x);
        }
        if((m+1)/2%10)cout<<'\n';//注意格式
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务