1303: [CQOI2009]中位数图

早起一AC,整天萌萌哒。

            

 Problem: 1303
    User: forgot93
    Language: C++
    Result: Accepted
    Time:56 ms
    Memory:2108 kb
****************************************************************/
 
#include <cstdio>
 
const int MAXN = 111111;
 
int a[MAXN], h[MAXN << 1];
 
int main() {
    int n, b;
    scanf("%d%d", &n, &b);
    int k;
    for (int i = 1;i <= n; ++i) {
        scanf("%d", &a[i]);
        if (a[i]==b) k=i;
      }
 
      for (int i=k,t=0;i<=n;i++){
      if (a[i]>b) t++;
      else if (a[i]<b) t--;
      h[t+MAXN]++;
     }
 
     int ans=h[MAXN];
     for (int i=k-1,t=0;i>=1;i--)
     {
         if (a[i]>b) t++;
         else t--;
         ans+=h[MAXN-t];
 
     }
     printf("%d
",ans);
     return 0;
}

 分析:1:先确定B的位置k,

         2:统计k-n中大于B的数,小于B的数,

         3:从K-1到1枚举,大于B,t++,小于B,t--;当K前面的T与K后面的T相等是就是一个结果。

     输出

原文地址:https://www.cnblogs.com/forgot93/p/3829465.html