Seq

在这里插入图片描述
在这里插入图片描述
mean(A[l…r])>=P当且仅当sum[r]-sum[l-1]-(r-l+1)P>=0即(sum[r]-rP)-(sum[l-1]-(l-1)P)>=0。令 B[i]=sum[i]-iP ,即为求 B[r]>=Bl,即求B的逆序对个数。

#include <iostream>
#include <algorithm>
#define int long long
using namespace std;
int n,p,a[1000002],d[1000002],v;
void dfs(int *a, int l, int r)
{
 if (r-l==0 || r-l==1) return;
 int m=(l+r)/2;
 dfs(a,l,m);
 dfs(a,m,r);
 int ll=l,rr=m,zz=l;
 while (zz<r)
  if ((r==rr) || (ll!=m && a[rr]>=a[ll]))
  {
   d[zz++]=a[ll++];
   v+=(r-rr);
  }
  else d[zz++]=a[rr++];
 for (int i=l; i<r; i++) a[i]=d[i];
 return;
}
signed main()
{
 cin>>n;
 for (int i=1; i<=n; i++) cin>>a[i];
 cin>>p;
 for (int i=1; i<=n; i++) a[i]+=a[i-1]-p;
 dfs(a,0,n+1);
 cout<<v<<endl;
 return 0;
}