P1908WA0pts求
查看原帖
P1908WA0pts求
267125
宋小陀螺楼主2024/8/2 08:02
#include<bits/stdc++.h>
using namespace std;
long long n,a[500005],tmp[500005],ans;
void msrt(long long lft,long long rgt) 
{
	if (rgt <= lft) return;
	long long mid = (lft + rgt) >> 1;
	msrt(lft,mid); msrt(mid + 1,rgt);
	long long i = lft,j = mid + 1,k = lft;
	while (i <= mid && j <= rgt) 
	{
		if (a[i] <= a[j]) tmp[k++] = a[i++];
		else 
		{
			tmp[k++] = a[j++];
			ans += i - lft;
		}
	}
	while (i <= mid) tmp[k++] = a[i++];
	while (j <= rgt) 
	{
		tmp[k++] = a[j++];
		ans += i - lft;
	}
	for (long long i = lft;i <= rgt;i++) a[i] = tmp[i];
}
int main()
{
	cin >> n;
	for (long long i = 1;i <= n;i++) cin >> a[i];
	msrt(1,n);
	cout << ans << endl;
	return 0;
}

2024/8/2 08:02
加载中...