1180 中位数

1180 中位数

 

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 
 
 
题目描述 Description

nyz!ysu!同学给你一个1~N的排列,他想问你该排列有多少个长度为奇数的连续子序列的中位数是K。中位数定义:把所有元素从小到大排列后,位于中间的数。

输入描述 Input Description

第一行为两个正整数N和K。

第二行为1~N 的排列

输出描述 Output Description

仅输出一个整数,中位数为K的连续子序列个数

样例输入 Sample Input

7 4 

5 7 2 4 3 1 6

样例输出 Sample Output

4

数据范围及提示 Data Size & Hint

样例解释:{4}, {7,2,4}, {5,7,2,4,3}和{5,7,2,4,3,1,6}。 

【数据说明】

30%的数据,n<=100

50%的数据  n<=10000

100%的数据,1<=k<=n<=100000

分类标签 Tags 点此展开 

 
暂无标签
AC代码:
#include<cstdio>
using namespace std;
const int N=1e5+10;
int n,k,p,ans,a[N],f[N<<1];
int main(){
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    for(int i=1;i<=n;i++){
        if(a[i]>k) a[i]=a[i-1]+1;
        else if(a[i]<k) a[i]=a[i-1]-1;
        else{
            p=i;
            a[i]=a[i-1];
        }
    }
    for(int i=0;i<p;i++) f[a[i]+100000]++;
    for(int i=p;i<=n;i++) ans+=f[a[i]+100000];
    printf("%d",ans);
    return 0;
} 
原文地址:https://www.cnblogs.com/shenben/p/5931311.html