zoukankan      html  css  js  c++  java
  • Running Median

    题目描述

    For this problem, you will write a program that reads in a sequence of 32-bit signed integers. After each odd-indexed value is read, output the median (middle value) of the elements received so far.

    输入

    The first line of input contains a single integer P, (1 ≤ P ≤ 1000), which is the number of data sets that follow. The first line of each data set contains the data set number, followed by a space, followed by an odd decimal integer M, (1 ≤ M ≤ 9999), giving the total number of signed integers to be processed.
    The remaining line(s) in the dataset consists of the values, 10 per line, separated by a single space.
    The last line in the dataset may contain less than 10 values.

    输出

    For each data set the first line of output contains the data set number, a single space and the number of medians output (which should be one-half the number of input values plus one). The output medians will be on the following lines, 10 per line separated by a single space. The last line may have less than 10 elements, but at least 1 element. There should be no blank lines in the output.

    样例输入

    3
    1 9
    1 2 3 4 5 6 7 8 9
    2 9
    9 8 7 6 5 4 3 2 1
    3 23
    23 41 13 22 -3 24 -31 -11 -8 -7
    3 5 103 211 -311 -45 -67 -73 -81 -99
    -33 24 56

    样例输出

    1 5
    1 2 3 4 5
    2 5
    9 8 7 6 5
    3 12
    23 23 22 22 13 3 5 5 3 -3
    -7 -3

    code

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <queue>
    #include <vector>
    using namespace std;
    typedef long long ll;
    int main(){
    	int t;
    	scanf("%d", &t);
    	while(t--){
    		int id,n;
    		scanf("%d%d", &id,&n);
    		printf("%d %d
    ", id,(n+1)/2);
    		priority_queue<int> l;
    		priority_queue<int,vector<int>,greater<int>> r;
    		for(int i = 1; i <= n; ++i){
    			int x;
    			scanf("%d", &x);
    			if(l.size()>r.size()&&x<l.top())
    				r.push(l.top()),l.pop(),l.push(x);
    			else r.push(x);
    
    			while(l.size()<r.size()) l.push(r.top()),r.pop();
    			int j=(i+1)/2;
    			if(i&1) printf("%d%s", l.top(),(i<n&&j%10!=0)?" ":"
    ");
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    mfc crc校验工具
    MFC 配置附加目录
    多线程中如何使用gdb精确定位死锁问题
    符号冲突
    动态库之间单例模式出现多个实例(Linux)
    c++普通函数在头文件定义报重复定义的错误。而class定义不会
    static初始化顺序及延伸
    tcmalloc使用中出现崩溃问题记录
    shell脚本—判断***是否安装
    【1080TI驱动+CUDA10.1+cudnn】安装记录
  • 原文地址:https://www.cnblogs.com/sciorz/p/9228365.html
Copyright © 2011-2022 走看看