题目链接

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

分析:

通过题目可得知,a[i]为中位数所在的区间一定是奇区间,

1、枚举每一个i,找出a[i],即以a[i]为中位数的区间个数

2、a[i]包括以下三种情况

①: i与其左边的数构成一个新数组,初始Count=0,如果左边的数比i大(小),那么Count+1,反之Count-1,每一次Count变成0,都意味着这个数左边的数字中大于i与小于i的个数相同,即此时i就是中位数,ans++

②: i与其右边的数构成一个新数组,初始Count=0,如果右边的数比i大(小),那么Count+1,反之Count-1,每一次Count变成0,都意味着这个数右边的数字中大于i与小于i的个数相同,即此时i就是中位数,ans++

③: 数组由i的左边和右边共同组成,用另一个数组cnt[]记录i往左找时各个Count的出现次数,在往右边找时,cnt[n+Count]就表示了左右两边比i大(小)和比i小(大)的数目之和相同,即此时i就是中位数,ans+=cnt[n+Count]

代码:

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int a[8009],cnt[16009];
int main()
{
int n,ans;
while(~scanf("%d",&n))
{
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
int Count;
for(int i=0; i<n; i++)
{
Count=0;//统计大于和小于的个数差
ans=0;//答案
memset(cnt,0,sizeof(cnt));//每次循环的时候都要进行刷新
for(int j=i-1; j>=0; j--)//找这个数字左边的
{
if(a[i]>a[j])
Count--;
else
Count++;
if(Count==0)//左边大于它本身和小于它本身的个数相等,这个数是左边这些数的中位数
ans++;
cnt[8000+Count]++;//标记左边比这个数大或小的数字的个数
}
Count=0; for(int j=i+1; j<n; j++)
{
if(a[i]<a[j])
Count--;
else
Count++;
if(Count==0)//这个数是右边这些数的中位数
ans++;
ans+=cnt[8000+Count];//右边应该是比这个数字小或大的数字的个数
}
if(i==0)
printf("%d",ans+1);//最后加上一个本身是本身的中位数
else
printf(" %d",ans+1);
}
printf("\n");
}
return 0;
}

HDU 5701 中位数计数 (思维题)的更多相关文章

  1. hdu 5701 中位数计数 思路题

    中位数计数 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  2. HDU 5701 ——中位数计数——————【思维题】

    中位数计数 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  3. HDU 5701 中位数计数 百度之星初赛

    中位数计数 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Sub ...

  4. HDU 5701 中位数计数

    这题真的很恶心,做了一天,最后问学长,才懂题意是什么,原来我一直都没读懂题.这我真的就无语了,你的题意多两句话会死啊?你测试样例多两个例子就不行啊?真蛋疼,题意都不懂,还做个shi? 题里说的是区间, ...

  5. HDU 5701 中位数计数 暴力

    老题了,附上黄学长链接一发,直接改改就AC了,http://hzwer.com/1216.html #include <cstdio> #include <iostream> ...

  6. BZOJ4401: 块的计数 思维题

    Description 小Y最近从同学那里听说了一个十分牛B的高级数据结构——块状树.听说这种数据结构能在sqrt(N)的时间内维护树上的各种信息,十分的高效.当然,无聊的小Y对这种事情毫无兴趣,只是 ...

  7. hdu - 1172 猜数字 (思维题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1172 这个题换一种想法,可以找出四位数中所有满足条件的数看是否只有一个. #include <iostre ...

  8. HDU 5752 Sqrt Bo (思维题) 2016杭电多校联合第三场

    题目:传送门. 题意:一个很大的数n,最多开5次根号,问开几次根号可以得到1,如果5次还不能得到1就输出TAT. 题解:打表题,x1=1,x2=(x1+1)*(x1+1)-1,以此类推.x5是不超过l ...

  9. HDU - 5963 朋友(思维题)

    题干 B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双 ...

随机推荐

  1. mysql EXPLAIN 参数表

    测试样式: 参数详情:

  2. ucontext-人人都可以实现的简单协程库

    ucontext的介绍 http://blog.csdn.net/qq910894904/article/details/41911175 协程的介绍 https://en.wikipedia.org ...

  3. @Primary 注解引出的问题

    @Primary 注解 刚看到这个,还以为是持久层的注解呢,以为和@Id差不多,一查才知道,这两个风马牛不相及,反倒和@Qualifier以及@Resource有点像了,但是相比而言,后面两个更加的灵 ...

  4. BZOJ3156 防御准备(动态规划+斜率优化)

    设f[i]为在i放置守卫塔时1~i的最小花费.那么显然f[i]=min(f[j]+(i-j)*(i-j-1)/2)+a[i]. 显然这是个斜率优化入门题.将不与i.j同时相关的提出,得f[i]=min ...

  5. 关于AC自动机和DP的联系

    首先是描述个大概.不说一些特殊的DP 或者借用矩阵来状态转移 (这些本质都是一样的). 只讲AC自动机和DP的关系(个人理解). AC自动机 又可以叫做状态机. 我一开始的认为.AC 自动机提供了一些 ...

  6. Crawl(2)

    http://cuiqingcai.com/3179.html # *-* coding: UTF-8 *-* import urllib2 import cookielib import re im ...

  7. 使用LD_Preload的Linux权限升级技巧

      0x00 前言 共享库是程序在启动时加载的库.正确安装共享库后,之后启动的所有程序将自动使用新的共享库. 0x01 共享库名称 每个共享库都有一个名为soname的特殊名称.soname有前缀li ...

  8. Python 使用CPickle和pickle模块进行序列化和反序列化

    #Cpickle使用C语言进行编写的相比pickle来说效率高很多 #-*-coding:utf-8-*-'''序列化操作'''try:    import cPickle as pickleexce ...

  9. sublime_Text3中snippet设置信息头(包括作者、日期)

    1.tool->new snippet(工具->新代码段) 创建一个新的snippet,并保存为author.sublime-snippet(最好在该目录(User)下再创建一个MySni ...

  10. Dubbo、Zookeeper集群搭建及Rose使用心得(二)

    上篇讲了一下配置,这次主要写一下这个框架开发的大概流程.这里以实现 登陆 功能为例. 一.准备工作 1.访问拦截器 用户在进行网站访问的时候,有可能访问到不存在的网页,所以,我们需要把这些链接重新定向 ...