全MLE求助!
查看原帖
全MLE求助!
766788
Syncc楼主2023/8/6 09:43

悬赏一关!

#include<bits/stdc++.h>
using namespace std;
int n;
int a[10005],b[10005],c[10005],pos[10005],mid,tmp[10005];
long long ans=0;
void mergeS(int left,int right){
	if(left==right){
		return ;
	}
	int mid=(left+right)/2;
	mergeS(left,mid);
	mergeS(mid+1,right);
	int i=left,j=mid+1,k=left;
	while(i<=mid && j<=right){
		if(a[i]<=a[j]){
			tmp[k++]=a[i++];
		}else{
			ans+=mid-i+1;
			tmp[k++]=a[j++];
		}
	}
	while(i<=mid){
		tmp[k++]=a[i++];
	}
	while(j<=right){
		tmp[k++]=a[j++];
	}
	for(int i=left;i<=right;i++){
		a[i]=tmp[i];
	}
}
int main(){
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		cin>>b[i];
	}
	memcpy(c,a,sizeof(a));
	sort(c+1,c+n+1);
	for(int i=1;i<=n;i++){
		a[i]=lower_bound(c+1,c+n+1,a[i])-c;
	}
	memcpy(c,a,sizeof(b));
	sort(c+1,c+n+1);
	for(int i=1;i<=n;i++){
		b[i]=lower_bound(c+1,c+n+1,b[i])-c;
	}
	for(int i=1;i<=n;i++){
		pos[b[i]]=i;
	}
	for(int i=1;i<=n;i++){
		c[i]=pos[a[i]];
	}
	mergeS(1,n);
	cout<<ans%(100000000-3);
	return 0;
}
2023/8/6 09:43
加载中...