bzoj 1303: [CQOI2009]中位数图

Posted xiyuedong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj 1303: [CQOI2009]中位数图相关的知识,希望对你有一定的参考价值。

 1 #include<cstdio>
 2 #include<iostream>
 3 #define M 100005
 4 using namespace std;
 5 int a[M],l[2*M],r[2*M],sum[M],n,m,p,ans;
 6 int main()
 7 {
 8     scanf("%d%d",&n,&m);
 9     for(int i=1;i<=n;i++)
10       {
11         scanf("%d",&a[i]);
12         if(a[i]<m)
13           a[i]=-1;
14         if(a[i]==m)
15           {
16             a[i]=0;
17             p=i;
18           }
19         if(a[i]>m)
20           a[i]=1;
21       }
22     l[n]=r[n]=1;
23     for(int i=p-1;i;i--)
24       {
25         sum[i]=sum[i+1]+a[i];
26         l[n+sum[i]]++;
27       }
28     for(int i=p+1;i<=n;i++)
29       {
30         sum[i]=sum[i-1]+a[i];
31         r[n+sum[i]]++;
32       }
33     for(int i=0;i<=2*n;i++)
34       ans+=l[i]*r[2*n-i];
35     printf("%d\n",ans);
36     return 0;
37 }

分别统计出在中位数左边右边比他大X(比他小X)的数有多少种方案,比他小赋值为-1,比他大赋值为1,用前缀和。最后相应的相乘。

以上是关于bzoj 1303: [CQOI2009]中位数图的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ 1303: [CQOI2009]中位数图前缀和

bzoj 1303: [CQOI2009]中位数图

[BZOJ1303] [CQOI2009] 中位数图

BZOJ1303 [CQOI2009]中位数图

bzoj千题计划175:bzoj1303: [CQOI2009]中位数图

BZOJ1303: [CQOI2009]中位数图