0分求助qwq
查看原帖
0分求助qwq
522035
神秘族首领楼主2023/7/26 10:38
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;

typedef long long ll;
ll a[500010];
ll n;
int ans = 0;

void merge(ll left, ll right) {
	ll mid = (left + right) / 2;
	ll l[n + 2];
	ll r[n + 2];
	for (ll i = left; i <= mid; i++) {
		l[i] = a[i];
	}
	for (ll i = mid + 1; i <= right; i++) {
		r[i] = a[i];
	}
	l[mid + 1] = 99999999;
	r[right + 1] = 99999999;
	ll templ = left;
	ll tempr = mid + 1;
	for (ll i = left; i <= right; i++) {
		if (l[templ] <= r[tempr]) {
			a[i] = l[templ];
			//ans += templ - left + tempr - right;
			templ++;
		} else {
			a[i] = r[tempr];
			//ans++;
			ans += mid - templ + 1;
			tempr++;
		}
	}
}

void mergesort(ll left, ll right) {
	ll mid = (left + right) / 2;
	if (left < right) {
		mergesort(left, mid);
		mergesort(mid + 1, right);
		merge(left, right);
	}
}

int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	mergesort(1, n);
//	for (int i = 1; i <= n; i++)
//		cout << a[i] << " ";
	//cout << endl;
	cout << ans ;
	return 0;
}
2023/7/26 10:38
加载中...