AC 100
#include<iostream>
#include<cstdio>
using namespace std;
const int N=2e5+10,mod=92084931;
int n,m,a[N],tmp[N],l,r,ans,cnt;
void msort(int le,int ri){
if(le>=ri)return ;
int mid=(le+ri)>>1;
msort(le,mid);
msort(mid+1,ri);
l=le,r=mid+1,cnt=l;
while(l<=mid&&r<=ri){
if(a[l]<a[r]){
tmp[cnt++]=a[r++];
ans=(ans+mid-l+1)%mod;
}
else tmp[cnt++]=a[l++];
}
while(l<=mid)tmp[cnt++]=a[l++];
while(r<=ri)tmp[cnt++]=a[r++];
for(int i=le;i<=ri;++i)a[i]=tmp[i];
return ;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;++i){
scanf("%d",a+i);
a[i]+=a[i-1]-m;
}
msort(0,n);
cout<<ans;
return 0;
}
和
WA 0
#include<iostream>
#include<cstdio>
using namespace std;
const int N=2e5+10,mod=92084931;
int n,m,a[N],tmp[N],l,r,ans,cnt;
void msort(int le,int ri){
if(le>=ri)return ;
mid=(le+ri)>>1;
msort(le,mid);
msort(mid+1,ri);
l=le,r=mid+1,cnt=l;
while(l<=mid&&r<=ri){
if(a[l]<a[r]){
tmp[cnt++]=a[r++];
ans=(ans+mid-l+1)%mod;
}
else tmp[cnt++]=a[l++];
}
while(l<=mid)tmp[cnt++]=a[l++];
while(r<=ri)tmp[cnt++]=a[r++];
for(int i=le;i<=ri;++i)a[i]=tmp[i];
return ;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;++i){
scanf("%d",a+i);
a[i]+=a[i-1]-m;
}
msort(0,n);
cout<<ans;
return 0;
}
明明只差第 8 行一点点,为什么分数差这么多?