1 #include <cstdio>
2 #include <cstdlib>
3 #include <cmath>
4 #include <cstring>
5 #include <string>
6 #include <algorithm>
7 #include <iostream>
8 #include <iomanip>
9 #define For(i,j,k) for(int i=j;i<=k;i++)
10 #define Dow(i,j,k) for(int i=j;i>=k;i--)
11 #define LL long long
12 using namespace std ;
13 inline LL read() {
14 LL x = 0 , f = 1 ;
15 char ch = getchar() ;
16 while(ch<'0'||ch>'9') { if(ch=='-') f = -1 ; ch = getchar() ; }
17 while(ch>='0'&&ch<='9') { x = x * 10+ch-48 ; ch = getchar() ; }
18 return x * f ;
19 }
20 inline void write(LL x) {
21 if( x < 0 ) putchar('-') ;
22 if( x > 9 ) write(x/10) ;
23 putchar(x%10+48) ;
24 }
25 inline void writeln(LL x) {
26 write(x) ;
27 putchar('\n') ;
28 }
29
30 const int N = 100011;
31 int n,alpha;
32 struct node{
33 int sum,id,rk;
34 }a[N];
35 int tree[N*2];
36 LL ans;
37
38 inline bool cmp_val(node a,node b) {
39 return a.sum < b.sum;
40 }
41 inline bool cmp_id(node a,node b) {
42 return a.id < b.id;
43 }
44 inline int lowbit(int x) {
45 return x&(-x);
46 }
47 inline void add(int x) {
48 for(; x<=n; x+=lowbit(x))
49 ++tree[x];
50 }
51 inline LL query(int x) {
52 LL res = 0;
53 for(; x; x-=lowbit(x))
54 res+=tree[x];
55 return res;
56 }
57 int main() {
58 n = read(); alpha = read();
59 a[1].id = 1; a[1].sum = 0;
60 For(i, 2, n+1) {
61 int x = read(); a[i].sum = a[i-1].sum;
62 if( x >= alpha ) a[i].sum++;
63 else a[i].sum--;
64 a[i].id = i;
65 }
66 ++n;
67 sort(a+1, a+n+1, cmp_val);
68 a[0].sum = a[1].sum-1;
69 For(i, 1, n) {
70 a[i].rk = a[i-1].rk;
71 if(a[i].sum != a[i-1].sum)
72 ++a[i].rk;
73 }
74 sort(a+1, a+n+1, cmp_id);
75 For(i, 1, n) {
76 ans=ans+query(a[i].rk);
77 add(a[i].rk);
78 }
79 printf("%lld\n",ans);
80 return 0;
81 }
82
83
84 /*
85
86
87 洛谷3031
88 高于中位数
89 树状数组
90
91
92 */