调立了
查看原帖
调立了
746213
_GalaxyMaster_楼主2024/4/14 20:22
#include <iostream>
#define int long long
using namespace std;

const int N = 5e5 + 10;
int a[N], b[N];
int ans = 0;

void merge(int l, int r) {
	if (l <= r) return;
	int mid = (l + r) / 2;
	merge(l, mid);
	merge(mid + 1, r);
	int p = 0, lp = l, rp = mid + 1;
	while (lp <= mid && rp <= r) {
		if (a[lp] <= a[rp]) b[++p] = a[lp++];
		else {
			b[++p] = a[rp++];
			ans += mid - lp + 1;
		}
	}
	while (lp <= mid) b[++p] = a[lp++];
	while (rp <= r) b[++p] = a[rp++];
	for (int i = 1, j = l; i <= p; ++i, ++j) a[j] = b[i];
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int n;
	cin >> n;
	for (int i = 1; i <= n; ++i) cin >> a[i];
	merge(1, n);
	cout << ans;
	return 0;
}

0pts悬棺

2024/4/14 20:22
加载中...