首页 > 其他分享 >NC50940 Running Median

NC50940 Running Median

时间:2022-08-27 08:00:50浏览次数:79  
标签:lg NC50940 Median Running num push 题目 gl size

题目

  • 原题地址:Running Median
  • 题目编号:NC50940
  • 题目类型:对顶堆
  • 时间限制:C/C++ 5秒,其他语言10秒
  • 空间限制:C/C++ 65536K,其他语言131072K

1.题目大意

  • 多组数据,每组有标号、元素个数(奇数个)以及元素,输出每组的标号、输出的个数、以及每次读到奇数个元素时已经读取的元素中的中位数,

2.题目分析

  • 动态维护序列中位数,用两个优先队列(堆)解决问题

3.题目代码

#include <bits/stdc++.h>

using namespace std;

int fr(){
    char ch;
    int sum,sign=1;
    while((ch=getchar())>'9'||ch<'0') if(ch=='-') sign=-1;sum=ch-'0';
    while((ch=getchar())>='0'&&ch<='9') sum=(sum<<3)+(sum<<1)+ch-'0';
    return sum*sign;
}

int main() {
    int t;
    cin >> t;
    while(t--) {
        int num, n;
        cin  >> num >> n;
        cout << num << ' ' << n/2+1 << endl;
        priority_queue<int> gl;
        priority_queue<int, vector<int>, greater<int>> lg;
        cin >> num, lg.push(num);
        cout << num << ' ';
        // l 3 g 4 | g 2 l 1
        for(int i=2;i<=n;i++) {
            num = fr();
            if(lg.top()>num) gl.push(num);
            else lg.push(num);
            if(lg.size()>gl.size()+1) gl.push(lg.top()), lg.pop();
            else if(gl.size()>lg.size()+1) lg.push(gl.top()), gl.pop();
            if(i%2==1) 
                if(lg.size()>gl.size()) cout << lg.top() << ' ';
                else cout << gl.top() << ' ';
            if(i%20==0) cout << endl;   
        }
        cout << endl;
    }
}

标签:lg,NC50940,Median,Running,num,push,题目,gl,size
From: https://www.cnblogs.com/zhangyi101/p/16629758.html

相关文章

  • 【luogu AT2366】Prefix Median(DP)
    PrefixMedian题目链接:luoguAT2366题目大意给你一个长度为2n-1的序列,你可以任意排序它们,问你有多少个不同的b数组。b数组的第i位为a数组1~2i-1区间的数的......
  • LeetCode 295 Find Median from Data Stream
    Themedianisthemiddlevalueinanorderedintegerlist.Ifthesizeofthelistiseven,thereisnomiddlevalueandthemedianisthemeanofthetwomidd......
  • 「AGC012F」Prefix Median 题解 (DP)
    题目简介给定一个长度为\(2n-1\)的序列\(a\),你可以随意排列\(a\)中的元素,请求出有多少种不同的序列\(b\),满足\(b\)的长度为\(n\)。\(b_i=\{a_1\ldotsa_{2......