不就是求顺序对吗?
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,a[100005],s[100005],t[100005],tree[100005],ans,k;
int lowbit(int x)
{
return x&-x;
}
void add(int x,int y)
{
while(x<=n)
{
tree[x]+=y;
x+=lowbit(x);
}
}
int query(int x)
{
int ans=0;
while(x!=0)
{
ans+=tree[x];
x-=lowbit(x);
}
return ans;
}
int main()
{
scanf("%lld%lld",&n,&k);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
a[i]-=k;
s[i]=s[i-1]+a[i];
}
n++;
for(int i=1;i<=n;i++) t[i]=s[i-1];
sort(t+1,t+n+1);
int len=unique(t+1,t+n+1)-(t+1);
for(int i=1;i<=n;i++) a[i]=lower_bound(t+1,t+n+1,a[i])-t;
for(int i=1;i<=n;i++)
{
add(a[i],1);
ans+=i-query(a[i]);
}
printf("%lld",n*(n-1)/2-ans);
return 0;
}