30求调
  • 板块P1908 逆序对
  • 楼主cgxd
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/5 21:51
  • 上次更新2024/6/6 12:56:57
查看原帖
30求调
1272259
cgxd楼主2024/6/5 21:51
#include<bits/stdc++.h>
#define reg register
#define int long long
using namespace std;
int n, ans;
vector<int> v1, v2;
void merge(int l, int r){
	int p1 = l, mid = l + r >> 1, p2 = mid + 1;
	v2.resize(p1);
	while(p1 <= mid and p2 <= r){
		if(v1[p1] < v1[p2])
			v2.push_back(v1[p1++]);
		else{
			v2.push_back(v1[p2++]);
			ans += mid - p1 + 1;
		}
	}while(p1 <= mid)
		v2.push_back(v1[p1++]);
	while(p2 <= r)
		v2.push_back(v1[p2++]);
	for(reg int i = l; i <= r; ++i)
		v1[i] = v2[i];
}void merge_sort(int l, int r){
	if(l >= r)
		return;
	int mid = l + r >> 1;
	merge_sort(l, mid);
	merge_sort(mid + 1, r);
	merge(l, r);
}signed main(){
	cin >> n;
	for(reg int i = 0; i < n; ++i){
		reg int k;
		scanf("%lld", &k);
		v1.push_back(k);
	}merge_sort(0, n - 1);
	cout << ans;
	return 0;
}
2024/6/5 21:51
加载中...