求数组中逆序对的数量 思想 代码模板 #include<iostream> using namespace std; typedef long long LL; const int N = 100010; int n; int q[N], tmp[N]; LL merge_sort_inverse(int q[], int l, int r){ if (l >= r) return 0; int mid = l + r >> 1; LL res = merge_sort_inverse(q, l, mid) + merg //归并排序的过程 int k = 0, i = l, j = mid + 1; while(i <= mid + 1 && j <= r){ if(q[i] <= q[j]) tmp[k++] = q[i++]; else{ if(q[i] > q[j]) tmp[k++] = q[j++]; res += mid - i + 1; } } //收尾 while(i <= mid) tmp[k++] = q[i++]; while(j <= r) tmp[k++] = q[j++]; //物归原主 for(int i = l, j = 0; i <= r; i++, j++) q[i] return res; } int main() { cin >> n; for(int i = 0; i < n; i++) cin >> q[i]; LL num = merge_sort_inverse(q, 0, n-1); cout << num << endl; }