博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AC日记——中位数 洛谷 P1168
阅读量:6971 次
发布时间:2019-06-27

本文共 1550 字,大约阅读时间需要 5 分钟。

题目描述

给出一个长度为N的非负整数序列A[i],对于所有1 ≤ k ≤ (N + 1) / 2,输出A[1], A[2], …, A[2k - 1]的中位数。[color=red]即[/color]前1,3,5,……个数的中位数。

输入输出格式

输入格式:

 

输入文件median.in的第1行为一个正整数N,表示了序列长度。

第2行包含N个非负整数A[i] (A[i] ≤ 10^9)。

 

输出格式:

 

输出文件median.out包含(N + 1) / 2行,第i行为A[1], A[2], …, A[2i – 1]的中位数。

 

输入输出样例

输入样例#1:
71 3 5 7 9 11 6
输出样例#1:
1356

说明

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

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

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

 

思路:

  两个堆,一个大根堆,一个小根堆

  大根堆存比中位数小的数

  小根堆存比中位数大的数

  每读两个数就维护一下当前中位数

  然后输出

  轻松ac

 

来,上代码:

#include 
#include
using namespace std;int n,now,now_,size_s,size_l;priority_queue
small;priority_queue
large;int main(){ scanf("%d",&n); scanf("%d",&now); printf("%d\n",now); for(int i=2;i<=n;i++) { scanf("%d",&now_); if(now_>=now) { large.push(now_*-1); size_l++; } else { small.push(now_); size_s++; } if(i%2) { if(size_l>size_s) { now_=large.top()*-1; small.push(now); now=now_; large.pop(); size_l--; size_s++; } else if(size_s!=size_l) { now_=small.top(); large.push(now*-1); now=now_; small.pop(); size_s--; size_l++; } printf("%d\n",now); } } return 0;}

 

转载于:https://www.cnblogs.com/IUUUUUUUskyyy/p/6218347.html

你可能感兴趣的文章
使用两个路由器扩展家庭无线网络
查看>>
Spark metrics on wordcount example
查看>>
【SQL Sever】SQL Sever数据库重命名
查看>>
Javascript数组中shift()和push(),unshift()和pop()操作方法使用
查看>>
Linux搭建一个FTP服务器
查看>>
Quick Touch – 在 iOS 设备运行的 “Touch Bar”
查看>>
Post with HttpClient
查看>>
仰视源代码,实现strcpy
查看>>
【Bootstrap Method】Evaluating The Accuracy of a Classifier
查看>>
让 Python 带你进入开源的世界——Git 从入门到与他人协作开发
查看>>
解决Flask局域网内访问不了的问题
查看>>
PHP获取今天、昨天、明天的日期
查看>>
[转载]DLL劫持生成器 源码开放(纯WINDOWS SDK)+ 实例分析
查看>>
在eclipse上Checkstyle的安装和使用
查看>>
控制流程完整性:给大家介绍一种“另类”的Javascript反分析技术
查看>>
vertica系列:数据的导入导出
查看>>
centos7如何添加开机启动服务/脚本
查看>>
Android OpenSL ES 开发:OpenSL ES利用SoundTouch实现PCM音频的变速和变调
查看>>
kafka学习指南(总结版)
查看>>
C#事件-使用事件需要的步骤
查看>>