归并排序,30分,求调
查看原帖
归并排序,30分,求调
750444
LogicVortex楼主2024/3/4 18:54
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[500005], n, b[500005], ans;
void m(int l, int r){
    if(l == r) return ;
    int mid = (l + r) / 2;
    m(l, mid), m(mid + 1, r);
    int i = l, j = mid + 1;
    int tot = l;
    while(i <= mid && j <= r){
        if(a[i] < a[j]){
            b[tot++] = a[i++];
        } else {
            ans += mid - i + 1;
            b[tot++] = a[j++];
        }
    }
    while(i <= mid)b[tot++] = a[i++];
    while(j <= r) b[tot++] = a[j++];
    for(int i = l; i <= r; i++){
        a[i] = b[i];
    }
    return ;
}
void Slove(){
    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
    }
    m(1,n);
    cout << ans;
}
signed main(){
	Slove();
	return 0;
}
2024/3/4 18:54
加载中...