题目链接:

中位数计数

Problem Description
 

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

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

Input
 

多组测试数据

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

第二行n个数,0≤每个数≤10​^9​​,

Output
 

N个数,依次表示第ii个数在多少包含其的区间中是中位数。

Sample Input
 
5
1 2 3 4 5
Sample Output
 
1 2 3 2 1

题意:

思路:

一个区间的中位数的,在这个区间内别它大的数的个数等于比它小的数的个数等于总数的一半,取一个区间[l,r],x[i]  y[i]分别表示在前i个数中有多少个数比中位数小和大,
x[r]-x[l-1]==y[r]-y[l-1]变换后就是x[r]-y[r]==x[l-1]-y[l-1];对于每一位数,如果他是中位数,那么先把它前边的数的x[i]-y[i]都记录下来,然后从它开始打结尾看有多少个
x[j]-y[j]==x[i]-y[i]; AC代码:
#include <bits/stdc++.h>
/*
#include <iostream>
#include <queue>
#include <cmath>
#include <map>
#include <cstring>
#include <algorithm>
#include <cstdio>
*/
using namespace std;
#define Riep(n) for(int i=1;i<=n;i++)
#define Riop(n) for(int i=0;i<n;i++)
#define Rjep(n) for(int j=1;j<=n;j++)
#define Rjop(n) for(int j=0;j<n;j++)
#define mst(ss,b) memset(ss,b,sizeof(ss));
typedef long long LL;
const LL mod=1e9+;
const double PI=acos(-1.0);
const int inf=0x3f3f3f3f;
const int N=;
int n,m;
int x[N],y[N],a[N],flag[*N];
int main()
{
while(scanf("%d",&n)!=EOF)
{
Riep(n)scanf("%d",&a[i]);
Riep(n)
{
mst(flag,);
int ans=;
x[]=y[]=;
for(int j=;j<=n;j++)
{
y[j]=y[j-];
x[j]=x[j-];
if(a[j]>a[i])y[j]++;
if(a[j]<a[i])x[j]++;
}
flag[]++;
for(int j=;j<i;j++)
{
int f=x[j]-y[j];
if(f>=)flag[f]++;
else flag[+f]++;
}
for(int j=i;j<=n;j++)
{
int f=x[j]-y[j];
if(f>=)ans+=flag[f];
else ans+=flag[+f];
}
if(i!=n) printf("%d ",ans);
else printf("%d\n",ans);
}
}
return ;
}

hdu-5701 中位数计数(中位数)的更多相关文章

  1. ACM学习历程—HDU5701 中位数计数(中位数 && 计数排序)

    http://acm.hdu.edu.cn/showproblem.php?pid=5701 这是这次百度之星初赛2B的第六题.之前白山云做过类似的题,省赛完回来,我看了一下大概就有这样的思路:首先枚 ...

  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 ——中位数计数——————【思维题】

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

  5. 51nod 1682 中位数计数

    1682 中位数计数基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均 ...

  6. 51nod 1682 中位数计数(前缀和)

    51nod 1682 中位数计数 思路: sum[i]表示到i为止的前缀和(比a[i]小的记为-1,相等的记为0,比a[i]大的记为1,然后求这些-1,0,1的前缀和): hash[sum[i]+N] ...

  7. 51 nod 1682 中位数计数

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1682 1682 中位数计数 基准时间限制:1 秒 空间限制: ...

  8. hdu 5701(区间查询思路题)

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

  9. hdu 5868 Polya计数

    Different Circle Permutation Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K ...

随机推荐

  1. Fragment实现底部选项卡切换效果

    现在很多APP的样式都是底部选项卡做为首页的,实现这样的效果,我们一般有这样几种方式,第一,最屌丝的做法,我直接自定义选项卡视图,通过监听选项卡视图,逻辑控制内容页的切换,这样做的想法一般是反正这几个 ...

  2. (剑指Offer)面试题20:顺时针打印矩阵

    题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字, 例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...

  3. CriminalIntent程序中Fragment相关内容

    Activity中托管UI fragment有两种方式: 添加fragment到acitivity中 在activity代码中添加fragment 第一种方法即将fragment添加到acitivit ...

  4. 也来说说C#异步委托(转)

    原文地址: http://www.cnblogs.com/lxblog/archive/2012/12/11/2813893.html 前些日子,看到园子里面有人用老王喝茶的例子讲解了一下同步和异步, ...

  5. HTML5 progress元素的样式控制、兼容与实例

    一.progress元素基本了解 基本UIprogress元素属于HTML5家族,指进度条.IE10+以及其他靠谱浏览器都支持.如下简单code: <progress>o(︶︿︶)o< ...

  6. hdu 5258 数长方形 离散化

    数长方形 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5258 Des ...

  7. Qt学习之自定义窗口部件

    自定义Qt窗口部件 实现一个十六进制的SpinBox,一般SpinBox只支持十进制整数,但是可以子类化方法实现该功能 需重新实现以下虚函数 virtual QString textFromValue ...

  8. android复制数据库到SD卡(网上搜集,未经验证)

    android中使用sqlite.复制assets下的数据库到SD卡.支持大于1M的文件 如果使用SD卡,需要在AndroidManifest.xml中设置权限 <uses-permission ...

  9. PrettyProgressBar

    https://github.com/liuguangqiang/PrettyProgressBar

  10. SQL Server 2008 清空删除日志文件

    USE [master]GOALTER DATABASE STAR9SQL SET RECOVERY SIMPLE WITH NO_WAITGOALTER DATABASE STAR9SQL SET ...