// O(n*log(n)) megoldás
// Legyen F(m)=|{i | a[i]>=c és i<=m}|, azaz c-nél nem kisebb tagok száma az első m tag között
// Belátható, hogy (a[k],..,a[m]) pontosan akkor értékes, ha F(m)-F(k-1)>=(m-k+1)/2 ( és k<=m )
// Legyen G(m)=2*F(m)-m
// Kell: G(m)-G(k-1)>=0, azaz G(k-1)<=G(m) ( és persze k<=m )
// Legyen H(m)=G(m)+n, ekkor 0<=H(m)<=2*n
#include <iostream>
#include <new>
using namespace std;
int main(void){
int **tree,pow2,depth,i,n,c,a,d,count,h,size,pos,pos2;
long long int answer;
cin>>n>>c;
for(pow2=1,depth=0;pow2<2*n+1;pow2<<=1,depth++);
tree=new int*[depth+1];
for(d=0;d<=depth;d++){
size=1+((2*n+1)>>d);
tree[d]=new int[size];
for(i=0;i<size;i++)tree[d][i]=0;
}
answer=0;
count=0;
for(i=1;i<=n;i++){
cin>>a;
count+=(a>=c);
h=2*count-i+n;
pos=-1;
pow2=1<<depth;
for(d=depth;d>=0;d--){
pos2=pos+pow2;
if(pos2<=h)pos=pos2,answer+=tree[d][pos>>d];
pow2>>=1;
}
answer+=(count>=(i+1)/2); // egész sorozat eddig értékes-e
for(d=0;d<=depth;d++)tree[d][h>>d]++;
}
cout<<answer<<endl;
return 0;
}
Ly8gTyhuKmxvZyhuKSkgbWVnb2xkw6FzCi8vIExlZ3llbiBGKG0pPXx7aSB8IGFbaV0+PWMgw6lzIGk8PW19fCwgYXpheiBjLW7DqWwgbmVtIGtpc2ViYiB0YWdvayBzesOhbWEgYXogZWxzxZEgbSB0YWcga8O2esO2dHQKLy8gQmVsw6F0aGF0w7MsIGhvZ3kgKGFba10sLi4sYVttXSkgcG9udG9zYW4gYWtrb3Igw6lydMOpa2VzLCBoYSBGKG0pLUYoay0xKT49KG0taysxKS8yICggw6lzIGs8PW0gKQovLyBMZWd5ZW4gRyhtKT0yKkYobSktbQovLyBLZWxsOiBHKG0pLUcoay0xKT49MCwgYXpheiBHKGstMSk8PUcobSkgKCDDqXMgcGVyc3plIGs8PW0gKQovLyBMZWd5ZW4gSChtKT1HKG0pK24sIGVra29yIDA8PUgobSk8PTIqbgoKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bmV3PgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKHZvaWQpewogIAogIGludCAqKnRyZWUscG93MixkZXB0aCxpLG4sYyxhLGQsY291bnQsaCxzaXplLHBvcyxwb3MyOwogIGxvbmcgbG9uZyBpbnQgYW5zd2VyOwogIAogIGNpbj4+bj4+YzsgIAogIAogIGZvcihwb3cyPTEsZGVwdGg9MDtwb3cyPDIqbisxO3BvdzI8PD0xLGRlcHRoKyspOwogIAogIHRyZWU9bmV3IGludCpbZGVwdGgrMV07CiAgZm9yKGQ9MDtkPD1kZXB0aDtkKyspewogICAgc2l6ZT0xKygoMipuKzEpPj5kKTsKICAgIHRyZWVbZF09bmV3IGludFtzaXplXTsKICAgIGZvcihpPTA7aTxzaXplO2krKyl0cmVlW2RdW2ldPTA7CiAgfQogIAogIGFuc3dlcj0wOwogIGNvdW50PTA7CiAgZm9yKGk9MTtpPD1uO2krKyl7CiAgICAgIGNpbj4+YTsKICAgIAogICAgICBjb3VudCs9KGE+PWMpOwogICAgICBoPTIqY291bnQtaStuOwogICAgICBwb3M9LTE7CiAgICAgIHBvdzI9MTw8ZGVwdGg7CiAgICAgIGZvcihkPWRlcHRoO2Q+PTA7ZC0tKXsKCSAgICAgIHBvczI9cG9zK3BvdzI7CgkgICAgICBpZihwb3MyPD1oKXBvcz1wb3MyLGFuc3dlcis9dHJlZVtkXVtwb3M+PmRdOwogICAgICAgICAgcG93Mj4+PTE7CiAgICAgIH0KICAgICAgYW5zd2VyKz0oY291bnQ+PShpKzEpLzIpOyAvLyBlZ8Opc3ogc29yb3phdCBlZGRpZyDDqXJ0w6lrZXMtZQogICAgICBmb3IoZD0wO2Q8PWRlcHRoO2QrKyl0cmVlW2RdW2g+PmRdKys7CiAgfQogIGNvdXQ8PGFuc3dlcjw8ZW5kbDsKICAKICByZXR1cm4gMDsKfQo=