首页 > 其他 > 详细

bzoj 1303: [CQOI2009]中位数图

时间:2016-03-06 23:32:40      阅读:205      评论:0      收藏:0      [点我收藏+]
 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]中位数图

原文:http://www.cnblogs.com/xydddd/p/5248894.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!