快速排序模板题,要注意结果会超过Int, 要使用long long。
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;

int a[100005];
ll cnt = 0;
void Merge(int l1, int r1, int l2, int r2) {
    int temp[100005], begin=l1, i=0;
    while (l1<=r1&&l2<=r2) {
        if (a[l1]<=a[l2]) {
            temp[i++] = a[l1++];
        } else {
            temp[i++] = a[l2++];
            cnt+=r1-l1+1;
        }
    }
    while (l1<=r1) temp[i++] = a[l1++];
    while (l2<=r2) temp[i++] = a[l2++];
    for (int j=0;j<i;j++) {
        a[begin+j] = temp[j];
    }
}

void find_inv_num(int l, int r) {
    if (l==r) return ;
    int mid = (l+r)/2;
    find_inv_num(l, mid);
    find_inv_num(mid+1, r);
    Merge(l, mid, mid+1, r);
}

int main() {
    int n;
    cin>>n;
    for (int i=1;i<=n;i++) {
        cin>>a[i];
    }
    find_inv_num(1, n);
    cout<<cnt;
    return 0;
}