zoukankan      html  css  js  c++  java
  • (数学) bzoj 1303

    1303: [CQOI2009]中位数图

    Time Limit: 1 Sec  Memory Limit: 162 MB
    Submit: 1541  Solved: 1003
    [Submit][Status][Discuss]

    Description

    给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有元素从小到大排列后,位于中间的数。

    Input

    第一行为两个正整数n和b ,第二行为1~n 的排列。

    Output

    输出一个整数,即中位数为b的连续子序列个数。

    Sample Input

    7 4
    5 7 2 4 3 1 6

    Sample Output

    4

    HINT

    第三个样例解释:{4}, {7,2,4}, {5,7,2,4,3}和{5,7,2,4,3,1,6}
    N<=100000

     
    统计左右 比b小 和比b大的数的个数就好辣!
    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int common=100005;
    int n,b,a[100005],lef[200105],rig[200105];
    int main()
    {
        int pos=0;
        scanf("%d%d",&n,&b);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            if(a[i]==b)
                pos=i;
        }
        int sum=0;
        lef[common]=rig[common]=1;
        for(int i=pos-1;i>=1;i--)
        {
            if(a[i]>b)
                sum++;
            else
                sum--;
            lef[sum+common]++;
        }
        sum=0;
        for(int i=pos+1;i<=n;i++)
        {
            if(a[i]<b)
                sum++;
            else
                sum--;
            rig[sum+common]++;
        }
        int ans=0;
        for(int i=common-n;i<=common+n;i++)
            ans+=lef[i]*rig[i];
        printf("%d
    ",ans);
        return 0;
    }
    

      

  • 相关阅读:
    Android SD卡读写文件
    Android 是什么
    Canvas 类
    Java IO流之字节流 FileInputStream
    Android中asset文件夹和raw文件夹区别
    随手收藏
    Java IO流
    Android私有文件资源文件的存取
    ubuntu 下的jdk安装
    Paint类
  • 原文地址:https://www.cnblogs.com/water-full/p/4516550.html
Copyright © 2011-2022 走看看