标签:
#include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> #include<queue> #include<algorithm> using namespace std; const int N=1e6+10; const int M=50000; const int INF=0x3f3f3f3f; int a[N], sum[N], b[N]; int main () { int n, m, i, x, ans; while (scanf("%d%d", &n, &m) != EOF) { memset(sum, 0, sizeof(sum)); memset(b, 0, sizeof(b)); ans = 0; for (i = 1; i <= n; i++) { scanf("%d", &a[i]); sum[i] = sum[i-1]; if (a[i] < m) sum[i]--; ///比中位数小-- if (a[i] > m) sum[i]++; ///比中位数大++ if (a[i] == m) x = i; } for (i = 0; i < x; i++) b[sum[i]+M]++; ///由于我们的sum值可能是负数,那么我们需要将所有的数变成正数,为了结果不受影响,加上一个比较大的数 for (i = x; i <= n; i++) ans += b[sum[i]+M]; ///首先我们要明白当两个位置的sum值相等时,那么这中间就会产生一个符合题意的序列 printf("%d\n", ans); } return 0; }
HDU 4908 BestCoder Sequence(BestCoder Round #3)
标签:
原文地址:http://www.cnblogs.com/syhandll/p/4897747.html