bzoj1303 [CQOI2009]中位数图

来源:互联网 发布:python会取代java么 编辑:程序博客网 时间:2024/06/05 04:11

题目

中位数判定日常做法。

把比b大的设为1,比b小的设为-1,一样设为0。
区间和如果为0的话,中位数就是b。

记录前缀和,如果有相等的就为一组1。
注意长度要为奇数。
要奇偶分开考虑。。。

#include<bits/stdc++.h>#define N 100000using namespace std;int n,x,b;int f[N+1];int sum[N+1];int cnt[2][2*N+1];int Ans;int main(){    scanf("%d%d",&n,&b);    for(int i=1;i<=n;i++)    {        scanf("%d",&x);        if(x==b)f[i]=0;        if(x<b)f[i]=1;        if(x>b)f[i]=-1;    }    for(int i=1;i<=n;i++)        sum[i]=sum[i-1]+f[i];    for(int i=0;i<=n;i++)        cnt[i%2][N+sum[i]]++;    for(int j=0;j<=2*N;j++)        Ans+=cnt[0][j]*cnt[1][j];       cout<<Ans;    return 0;}
原创粉丝点击