这么写过不了吗?
查看原帖
这么写过不了吗?
809371
Love_Natsu楼主2024/5/1 09:08

过了样例和第一个点,

#include <iostream>
#include <algorithm> 
#define N 100005
#define int long long
const int m=100000000-3;
using namespace std;
int n,b[N],c[N],ans;
struct c_{int _a,_b;}a[N];
bool cmp(c_ x,c_ y){
	if(x._a<=y._a)return 1;
	return 0;
}
void m_sort(int l,int r){//这函数写的没问题
	if(l==r)return;
	int mid=l+(r-l)/2;
	m_sort(l,mid);m_sort(mid+1,r);
	int lp=l,rp=mid+1;
	for(int i=l;i<=r;i++)
		if(lp>mid){c[i]=b[rp++];}
		else if(rp>r){c[i]=b[lp++];continue;}
		else if(b[lp]<=b[rp])c[i]=b[lp++];
		else c[i]=b[rp++],ans+=mid-lp+1;
	for(int i=l;i<=r;i++)b[i]=c[i];
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i]._a;
	for(int i=1;i<=n;i++)cin>>a[i]._b;
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++)b[i]=a[i]._b;
	m_sort(1,n);//我觉得可以直接算几次排好,看着也不会超
	cout<<ans%m;
	return 0;
}
2024/5/1 09:08
加载中...