50pts,求调
查看原帖
50pts,求调
1316741
JCZ_William楼主2025/1/25 20:06
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n , a[int(5e5 + 5)] , b[int(5e5 + 5)];
ll ans;
void mer(int l , int r)
{
	if (l == r)
	{
		return;
	}
	int mid = (l + r) / 2; 
	mer(l , mid);
	mer(mid + 1 , r);
	int i = l , j = mid + 1 , k = l;
	while (i <= mid and j <= r)
	{
		if (a[i] <= a[j])
		{
			b[k++] = a[i++];
		}
		else
		{
			b[k++] = a[j++];
			ans += mid - i + 1;
		}
	}
	while(i <= mid)
	{
		b[k++] = a[i++];
	}
	while(j <= r)
	{
		b[k++] = a[j++];
	}
	for (int i = 1 ; i <= r ; i ++ )
	{
		a[i] = b[i];
	}
}
int main()
{
	scanf("%d" , &n);
	for (int i = 1 ; i <= n ; i ++ )
	{
		scanf("%d" , &a[i]);
	}
	mer(1 , n);
	printf("%lld" , ans);
    return 0;
}
2025/1/25 20:06
加载中...