30pts,求大佬调
查看原帖
30pts,求大佬调
1470808
Ambrose0321楼主2025/2/5 19:38

30pts code:

#include <bits/stdc++.h>
#define pb push_back
using namespace std;
typedef long long ll;
const int N = 500001;
int n, a[N], c[N];
ll solve(int l, int r) {
	if (l == r)
		return 0;
	int m = (l + r) / 2, t = 0, p1 = l, p2 = m + 1;
	ll cnt = solve(l, m) + solve(m + 1, r);
	while (p1 <= m && p2 <= r)
		if (a[p1] < a[p2])
			c[++t] = a[p1++], cnt += p2 - m - 1;
		else
			c[++t] = a[p2++];
	while (p1 <= m)
		c[++t] = a[p1++], cnt += p2 - m - 1;
	while (p2 <= r)
		c[++t] = a[p2++];
	for (int i = 1; i <= t; i++)
		a[l + i - 1] = c[i];
	return cnt;
}
int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
		scanf("%d", &a[i]);
	printf("%lld\n", solve(1, n));
}
2025/2/5 19:38
加载中...