1function mergeSortCount(nums, lo, hi, tmp) {
2 if (hi - lo <= 1) return 0;
3 const mid = (lo + hi) >> 1;
4 let inv = mergeSortCount(nums, lo, mid, tmp);
5 inv += mergeSortCount(nums, mid, hi, tmp);
6 let i = lo, j = mid, k = lo;
7 while (i < mid && j < hi) {
8 if (nums[i] <= nums[j]) tmp[k++] = nums[i++];
9 else { tmp[k++] = nums[j++]; inv += mid - i; }
10 }
11 while (i < mid) tmp[k++] = nums[i++];
12 while (j < hi) tmp[k++] = nums[j++];
13 for (let p = lo; p < hi; p++) nums[p] = tmp[p];
14 return inv;
15}