zoukankan      html  css  js  c++  java
  • 洛谷 P1168 中位数

    洛谷 P1168 中位数

    洛谷传送门

    题目描述

    给出一个长度为NN的非负整数序列A_iA**i,对于所有1 ≤ k ≤ (N + 1) / 21≤k≤(N+1)/2,输出A_1, A_3, …, A_{2k - 1}A1,A3,…,A2k−1的中位数。即前1,3,5,…1,3,5,…个数的中位数。

    输入格式

    第11行为一个正整数NN,表示了序列长度。

    第22行包含NN个非负整数A_i (A_i ≤ 10^9)A**i(A**i≤109)。

    输出格式

    共(N + 1) / 2(N+1)/2行,第ii行为A_1, A_3, …, A_{2k - 1}A1,A3,…,A2k−1的中位数。

    输入输出样例

    输入 #1复制

    输出 #1复制

    说明/提示

    对于20%20%的数据,N ≤ 100N≤100;

    对于40%40%的数据,N ≤ 3000N≤3000;

    对于100%100%的数据,N ≤ 100000N≤100000。

    题解:

    动态求中位数。

    一道模板题吧。

    可以用对顶堆解决。

    代码如下:

    #include<cstdio>
    #include<queue>
    #include<vector>
    using namespace std;
    int n;
    priority_queue<int> bq;
    priority_queue<int,vector<int>,greater<int> >sq;
    int main()
    {  
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            int x;
            scanf("%d",&x);
            bq.push(x);sq.push(x);
            if(i%2==0)
                continue;
            while(bq.top()!=sq.top())
            {
                int a=bq.top();
                int b=sq.top();
                bq.pop();sq.pop();
                bq.push(b);sq.push(a);
            }
            printf("%d
    ",bq.top());
        }
        return 0;
    }
    
  • 相关阅读:
    nginx部分功能配置备忘
    mysql 截取数据 组合排序
    java实现排列组合
    每日记载内容总结48
    http请求转换为https请求
    每日记载内容总结47
    rabbitmq 基本操作
    redis免密登录被入侵解决方式
    支付宝支付sign_type从RSA到RSA2遇到的问题
    Java面试题2
  • 原文地址:https://www.cnblogs.com/fusiwei/p/11468850.html
Copyright © 2011-2022 走看看