【普及二】小埋的解谜游戏 WA

#include<iostream>
#include<algorithm>
using namespace std;
const int N=2e5+5,mod=1e9+7;
int a[N],tmp[N],c[N],n,m,ans=0,cnt=0;
void merge(int a[],int l1,int r1,int l2,int r2){
	int i=l1,j=l2,k=l1;
	while(i<=r1&&j<=r2)
		if(a[i]>a[j]){
			ans=(ans+r1-i+1)%mod;
			tmp[k++]=a[j++];
		}
		else tmp[k++]=a[i++];
	while(i<=r1) tmp[k++]=a[i++];
	while(j<=r2) tmp[k++]=a[j++];
	for(int i=l1;i<=r2;i++)
		a[i]=tmp[i];
}
void MergeSort(int a[],int l,int r){
	if(l==r) return;
	int m=l+r>>1;
	MergeSort(a,l,m);
	MergeSort(a,m+1,r);
	merge(a,l,m,m+1,r);
}
signed main(){
//	freopen("sample (1).in","r",stdin);
	ios::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>c[i];
		c[i]-=m;
		if(c[i]>0) cnt++;
		a[i]=a[i-1]+c[i];
	}
	for(int i=1;i<=n/2;i++)
		swap(a[i],a[n-i+1]);
	MergeSort(a,1,n);
	cout<<(ans+cnt)%mod<<endl;
	return 0;
}

调了三个小时,样例都过不了。

3 个赞

可以给题面嘛?

2 个赞

4 个赞

可不可以告诉我求逆序对干什么

4 个赞

解决了,把 cnt 删掉然后 MergeSort1n+1 开始

2 个赞