#include <iostream>
#include <string.h>
#include <string>
#include <algorithm>
#include <math.h>
#include <queue>
#include <stdlib.h>
#include <stdio.h>


using namespace std;
typedef long long int LL;
const int maxn=1e5+100;
const LL LINF=1e14+100;
struct nodedsfdsa
{
    struct node
    {
        int l,r;
		LL sum;
    }seg[maxn*30];
    int root,sz;
    int newnode()
    {
        sz++;
        seg[sz].l=seg[sz].r=-1;
        seg[sz].sum=0;
        return sz;
    }
    int init()
    {
        sz=-1;
		root=newnode();
		return root;
    }
    void update(int &i,LL l,LL r,LL val)
    {
        if(i==-1) i=newnode();
        seg[i].sum++;
        if(l==r) return ;
        LL mid=(l+r)>>1;
        if(val<=mid) update(seg[i].l,l,mid,val);
        else update(seg[i].r,mid+1,r,val);
    }
	LL query(int i,LL l,LL r,LL L,LL R)
	{
	    if(i==-1) return 0;
		if(l==L&&r==R) return seg[i].sum;
		LL mid=(l+r)>>1;
		if(R<=mid) return query(seg[i].l,l,mid,L,R);
		else if(L>mid) return query(seg[i].r,mid+1,r,L,R);
		else return query(seg[i].l,l,mid,L,mid)+query(seg[i].r,mid+1,r,mid+1,R);
	}
}AC;
int a[maxn];
int main()
{
    int n,k;
    while(scanf("%d%d",&n,&k)+1)
    {

        for(int i=1;i<=n;i++)
        {
            int x;
            scanf("%d",&x);
            a[i]=x-k;
        }
		int root=AC.init();
		AC.update(root,-LINF,LINF,0);
		LL sum=0;
		LL ans=0;
		for(int i=1;i<=n;i++)
		{
			sum+=a[i];
		    ans+=AC.query(root,-LINF,LINF,-LINF,sum);
			AC.update(root,-LINF,LINF,sum);
		}
		cout<<ans<<endl;
    }
    return 0;
}
