bzoj1303: [CQOI2009]中位数图

Posted Sky_miner

tags:

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

bzoj1303: [CQOI2009]中位数图

 

 代码如下:

 1 #include <queue>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <iostream>
 5 #include <algorithm>
 6 using namespace std;
 7 typedef long long ll;
 8 inline void read(int &x){
 9     x=0;char ch;bool flag = false;
10     while(ch=getchar(),ch<\'!\');if(ch == \'-\') ch=getchar(),flag = true;
11     while(x=10*x+ch-\'0\',ch=getchar(),ch>\'!\');if(flag) x=-x;
12 }
13 inline int cat_max(const int &a,const int &b){return a>b ? a:b;}
14 inline int cat_min(const int &a,const int &b){return a<b ? a:b;}
15 const int maxn = 1000010;
16 #define f(x) (x == m ? 0 : (x < m ? -1 : 1) )
17 int a[maxn],l[maxn],r[maxn];
18 int s[maxn];
19 int main(){
20  
21     int n,m;read(n);read(m);
22     int p = -1;
23     for(int i=1,x;i<=n;++i){
24         read(x);a[i] = f(x);
25         if(a[i] == 0) p = i;
26     }
27     for(int i=p-1;i>=1;--i) s[i] = a[i] + s[i+1],++l[s[i]+n];
28     for(int i=p+1;i<=n;++i) s[i] = a[i] + s[i-1],++r[s[i]+n];
29     int ans = 0;++l[n];++r[n];
30     for(int i=0;i<(n<<1);++i) ans += l[i]*r[(n<<1)-i];
31     printf("%d\\n",ans);
32     //getchar();getchar();
33     return 0;
34 }

 

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

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

bzoj 1303: [CQOI2009]中位数图

[BZOJ1303] [CQOI2009] 中位数图

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

BZOJ1303 [CQOI2009]中位数图

BZOJ1303: [CQOI2009]中位数图