文章目录 问题描述实现代码 问题描述 实现代码 #include <iostream> using namespace std; typedef long long LL; const int N = 1e5 + 10; int q[N]; int temp[N]; int n; LL merge_sort(int q[], int l, int r) { if(l >= r) return 0; int mid = r + l >> 1; LL res = merge_sort(q, l, mid) + merge_sort(q, mid + 1, r); int k = 0, i = l, j = mid + 1; while(i <= mid && j <= r) { if(q[i] <= q[j]) temp[k ++ ] = q[i ++ ]; else { res += mid - i + 1; temp[k ++ ] = q[j ++ ]; } } while(i <= mid) temp[k ++ ] = q[i ++]; while(j <= r) temp[k ++ ] = q[j ++ ]; //还原到q[] for(int i = l, j = 0; i <= r;i ++, j ++) { q[i] = temp[j]; } return res; } int main() { cin >> n; for(int i = 0; i < n; i++ ) cin >> q[i]; cout << merge_sort(q, 0, n - 1); return 0; }