【每日一题】Running Median

Running Median

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

solution

题目就是要求对于每奇数个数字,输出其中位数。

我们只要维护两个堆,第一个大根堆维护较小的数字,第二个小根堆维护较大的个数字。每当新加入一个数字的时候将其与大根堆的队首比较,并维护两个堆的大小。

要求的中位数就是大根堆里的最大值。

code

/*
* @Author: wxyww
* @Date: 2020-04-08 20:09:02
* @Last Modified time: 2020-04-08 20:20:57
*/
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<bitset>
#include<cstring>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;
const int N = 10010;
ll read() {
    ll x=0,f=1;char c=getchar();
    while(c<'0'||c>'9') {
        if(c=='-') f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9') {
        x=x*10+c-'0';
        c=getchar();
    }
    return x*f;
}
priority_queue<ll>q1;
priority_queue<ll,vector<ll>,greater<ll> >q2;

int main() {
    // freopen("1.in","r",stdin);
    int T = read();
    while(T--) {
        while(!q1.empty()) q1.pop();
        while(!q2.empty()) q2.pop();
        int num = read(),n = read();
        printf("%d %d\n",num,(n + 1) >> 1);
        q1.push(read());
        int now = 1;
        printf("%lld ",q1.top());
        for(int i = 2;i <= n;++i) {
            ll x = read();
            if(x > q1.top()) q2.push(x);
            else q1.push(x);
            if(i & 1) {
                while(q1.size() > q2.size()) {q2.push(q1.top());q1.pop();}
                while(q2.size() >= q1.size()) {q1.push(q2.top());q2.pop();}
                printf("%lld ",q1.top());
                ++now;
                if(now % 10 == 0) puts("");
            }
        }
        if(now % 10) puts("");
    }

    return 0;
}

/*
1
2 9 
9 8 7 6 5 4 3 2 1 
*/
全部评论

相关推荐

看到这个内容真是闹麻了。。。。。。现在有了AI以后很多人面试都会作弊吗?&nbsp;那对老老实实面试的人岂不是不公平....
重生之我要干前端:放宽心,作弊很明显的,面试官也不是傻子,而且这世上更多的肯定是依靠自己的知识的人,所以放宽心提升自己最重要
点赞 评论 收藏
分享
下北澤大天使:你是我见过最美的牛客女孩😍
点赞 评论 收藏
分享
二月份来北京实习,虽然提前做了攻略,但是是人生第一次经历租房,全程自己搞定,所以难免还是踩坑了😅奉劝大家,租房不要只看自己的房间如何,还要看别人的房门口环境如何因为我就是那个倒霉蛋,我旁边房间额门口堆了一大堆杂物,都是另一个房间的人放在外面的,而且他门口放了几十双鞋子,冬天还好,现在是夏天,可太味了,怎么有这么多鞋啊啊啊啊,请看图片O(≧口≦)O一开始这屋里是一个人住,后来变成两个人住(他说他妈妈来北京看病暂时住,ok能体谅的)但是大概一个多月以后他妈妈回家了,无缝衔接了一位女朋友接着住,而且他的女朋友巨能买东西,我真的不得不吐槽,🥲我不管别人怎么花钱的,但是你买东西你起不来,你能不能换个时间约送上门,总是在周内或者周末的某一天早上七点多,没到起来的时间,快递员框框敲门了!!!!而且经常点外卖但是我们楼下有门禁,外卖员按响铃他俩不去解锁,一直等一直等,等到我们其他人受不了去帮解锁,吵得要死,他们像聋了一样!!!服啦!!!我的房租一个月不到1600,但是是阳隔,很不隔音,隔壁的大哥有时候会半夜吃薯片或者嗑瓜子(凌晨两三点的时候)好几次我都从梦里被嗑出来了🥲还好还剩两个月就实习结束可以回家了,呜呜想家,想我自己的窝😭
码农索隆:这也是我不喜欢合租的原因
我的租房踩坑经历
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务