中位数计数

Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 999    Accepted Submission(s): 383

Problem Description
中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数。

现在有n个数,每个数都是独一无二的,求出每个数在多少个包含其的区间中是中位数。

 
Input
多组测试数据

第一行一个数n(n≤8000)

第二行n个数,0≤每个数≤109,

 
Output
N个数,依次表示第i个数在多少包含其的区间中是中位数。
 
Sample Input
5
1 2 3 4 5
 
Sample Output
1 2 3 2 1
 
Source
 
非常巧妙的思路,佩服
当找到 a[i] 时分三种情况考虑:
1:先去找a[i]的左边,如果左边扫过去时大于a[i]的书出现的次数与小于a[i]的数出现的次数相同,用一个num做计数器,num++和num--,每次num=0时,a[i]就是当前这个序列的中位数,计数器+1。
2:右边亦如此。
3:接下来是左右两边,用一个计数器记录num出现的次数,当左边为num时,右边就为-num,所以相加即为答案,为了防止数组越界,加个大数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <queue>
#include <algorithm>
using namespace std;
const int N = ;
int a[N];
int ans[N],cnt[];
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
for(int i=;i<n;i++){
scanf("%d",&a[i]);
ans[i]=; ///自己也算自己的中位数
}
for(int i=;i<n;i++){
memset(cnt,,sizeof(cnt));
int num = ;
for(int j=i-;j>=;j--){ ///往左区间找,看有多少满足a[i]是中位数的
if(a[j]<a[i]) num++;
else num--;
if(num==) ans[i]+=; ///如果num=0,则证明此时的小于a[i]的数和大于a[i]的数数量相同,a[i]是中位数
cnt[N+num]++;
}
num = ;
for(int j=i+;j<n;j++){
if(a[j]<a[i]) num++;
else num--;
if(num==) ans[i]+=;
ans[i]+=cnt[N-num];
}
}
for(int i=;i<n;i++){
if(i!=n-) printf("%d ",ans[i]);
else printf("%d\n",ans[i]);
}
}
}

最新文章

  1. 初学c# -- 学习笔记(四)
  2. JS获取浏览器名和版本信息
  3. [原]Wpf应用Path路径绘制圆弧
  4. sublime相关设置
  5. Java垃圾收集器之--Garbage-First Collector
  6. 下载安装和OpenCV匹配的Android开发环境
  7. 静态wenb开发,动态web开发
  8. 【转】10分钟搭建NDK的Android开发环境
  9. Android 5.0五大安全特性
  10. 工作随笔——ember框架去除url上的#号
  11. 巨幅SQL优化(SQL Tuning)——秒杀十几个小时不出结果的SQL
  12. javascript中的Promise使用
  13. nginx 容器反向代理网址的设置
  14. yii2 or查询
  15. 51nod--1264 线段相交 (计算几何基础, 二维)
  16. Asp.Net_ 服务端向客户端写JavaScript脚本
  17. DBS-Tally book(记账本)
  18. 限制RICHTEXTBOX的输入的范围
  19. kill -HUP pid 更改配置后不重新启动服务,动态更新配置文件
  20. 再记录一次delete出错的经历

热门文章

  1. Goroutines和Channels
  2. Survey lists 10 most innovative cities
  3. GoF23种设计模式之结构型模式之组合模式
  4. web开发框架tornado
  5. python getopt模块使用方法
  6. linux下安装mysql并设置远程连接
  7. python基础之文件处理总结
  8. JAVA基础篇—模拟服务器与客户端通信
  9. LeetCode(290) Word Pattern
  10. Latex:插入伪代码