题目描述

给出一个长度为 $ N $ 的非负整数序列 $ A_i $ ,对于所有 $ 1 ≤ k ≤ (N + 1) / 2 $ ,输出 $ A_1, A_3, …, A_{2k - 1} $ 的中位数。即前 $ 1,3,5,… $ 个数的中位数。

输入输出格式

输入格式:

第 $ 1 $ 行为一个正整数 $ N $ ,表示了序列长度。

第 $ 2 $ 行包含 $ N $ 个非负整数 $ A_i (A_i ≤ 10^9) $

输出格式:

共 $ (N + 1) / 2 $行,第 $ i $ 行为 $ A_1, A_3, …, A_{2k - 1}$ 的中位数。

输入输出样例

输入样例#1:

7
1 3 5 7 9 11 6

输出样例#1:

1
3
5
6

说明

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

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

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

双堆搞事...中位数的特性是所有数字排序后中间的数字,所以用大根堆和小根堆来维护区间,边读入就可以维护了

你把大的扔一边,小的扔一边,然后你看看哪一个堆比较大,那个堆顶的元素就是中位数了

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <queue> using std::priority_queue ; priority_queue < int > lar ;
priority_queue < int , std:: vector < int > , std:: greater < int > > sma ; int n , v ; int main(){
scanf ("%d" , & n );
scanf("%d" , & v ) ; lar.push( v ) ;
printf("%d\n" , v );
for (int i = 2 ; i <= n ; ++ i){
scanf ("%d" , & v) ;
if (v > lar.top () ) sma.push( v ) ;
else lar.push( v ) ;
while ( abs( lar.size() - sma.size() ) > 1 ){
if ( lar.size() > sma.size() ) sma.push( lar.top() ) , lar.pop() ;
else lar.push( sma.top() ) , sma.pop() ;
}
if ( i & 1 ) printf("%d\n" , lar.size() > sma.size() ? lar.top() : sma.top() );
}
return 0;
}

LuoGu P1168 中位数的更多相关文章

  1. [luogu]P1168 中位数[堆]

    [luogu]P1168 中位数 题目描述 给出一个长度为N的非负整数序列A[i],对于所有1 ≤ k ≤ (N + 1) / 2,输出A[1], A[3], …, A[2k - 1]的中位数.即前1 ...

  2. luogu P1168 中位数 |树状数组+二分

    题目描述 给出一个长度为NN的非负整数序列A_i,对于所有1 ≤ k ≤ (N + 1) / 21≤k≤(N+1)/2,输出A_1, A_3, -, A_2k - 1的中位数.即前1,3,5,-个数的 ...

  3. 【Luogu P1168】【Luogu P1801&UVA 501】中位数&黑匣子(Black Box)——对顶堆相关

    Luogu P1168 Luogu P1801 UVA 501(洛谷Remote Judge) 前置知识:堆.优先队列STL的使用 对顶堆 是一种在线维护第\(k\)小的算法. 其实就是开两个堆,一个 ...

  4. P1168 中位数

    P1168 中位数树状数组+二分答案.树状数组就是起一个高效查询比二分出来的数小的有几个. #include<iostream> #include<cstdio> #inclu ...

  5. 洛谷——P1168 中位数

    P1168 中位数 题目描述 给出一个长度为NN的非负整数序列$A_i$​,对于所有1 ≤ k ≤ (N + 1),输出$A_1, A_3, …, A_{2k - 1}A1​,A3​,…,A2k−1​ ...

  6. Luogu P1627 中位数

    Luogu P1627 中位数 先记录目标数的位置,并且把数组映射为: $$a[i]=\begin{cases}-1,a[i]<b\0,a[i]=b\1,a[i]>b\end{cases} ...

  7. 洛谷P1168 中位数——set/线段树

    先上一波链接 https://www.luogu.com.cn/problem/P1168 这道题我们有两种写法 第一种呢是线段树,我们首先需要将原本的数据离散化,线段树维护的信息就是区间内有多少个数 ...

  8. 洛谷 P1168 中位数(优先队列)

    题目链接 https://www.luogu.org/problemnew/show/P1168 解题思路 这个题就是求中位数,但是暴力会tle,所以我们用一种O(nlogn)的算法来实现. 这里用到 ...

  9. 洛谷—— P1168 中位数

    https://www.luogu.org/problem/show?pid=1168 题目描述 给出一个长度为N的非负整数序列A[i],对于所有1 ≤ k ≤ (N + 1) / 2,输出A[1], ...

随机推荐

  1. 好坑吖,几乎GG,关于Nginx和supervisor的配置

    从没想过部署个站点居然这么费劲.这还是搞了好多回且环境都具备的前提一下. 不过问题还是挺刁钻的,下面详细说一下. 1.net core编译少dll文件问题 发布到服务器上执行dotnet FileSe ...

  2. axios拦截器

    import axios from "axios"; axios.interceptors.response.use(response => { //=>设置响应拦截器 ...

  3. jmeter学习记录--07--jmeter元件

    通过jmeter元件可以模拟负载.参数化.设置关联.设置检查点.设置集合点.控制场景运行.监控测试结果等. 1.逻辑控制器:比如foreach控制器,查询到了订单并要对每个订单进行出库操作,以订单号作 ...

  4. vivado place30-378

    AR# 60131 Vivado Placer - [Place 30-378] Input pin of input buffer has an illegal connection to a lo ...

  5. CSS之样式属性(背景固定、圆形头像、模态框)

    CSS属性 一.宽和高 width属性可以为元素设置宽度. height属性可以为元素设置高度. 块级标签才能设置宽度,内联标签的宽度由内容来决定. div {width: 1000px;backgr ...

  6. Angular6封装http请求

    最近抽空学习了一下Angular6,之前主要使用的是vue,所以免不了的也想对Angular6提供的工具进行一些封装,今天主要就跟大家讲一下这个http模块. 之前使用的ajax库是axios,可以设 ...

  7. golang的socket服务端与客户端

    服务端 服务端的处理流程 监听端口 接收客户端的链接 创建goroutine,处理该链接 package main import ( "fmt" "net" ) ...

  8. 从浅入深详解独立ip网站域名恶意解析的解决方案

    立IP空间的好处想必大家都能耳熟闻详,稳定性强,利于seo等让大家选择了鼎峰网络香港独立IP空间.那么, 网站独享服务器IP地址,独立IP空间利于百度收录和权重的积累.不受牵连.稳定性强等诸多优势为一 ...

  9. sea.js简单使用教程

    sea.js简单使用教程 下载sea.js, 并引入 官网: http://seajs.org/ github : https://github.com/seajs/seajs 将sea.js导入项目 ...

  10. Python之路(第十七篇)logging模块

    一.logging模块 (一).日志相关概念 日志是一种可以追踪某些软件运行时所发生事件的方法.软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情.一个事件可以用一个可包含可选变 ...