#include <iostream>
#include <vector>
const int MOD = 1000000007;
int merge(std::vector<int>& nums, int start, int mid, int end) {
std::vector<int> temp(end - start + 1);
int count = 0;
int i = start;
int j = mid + 1;
int k = 0;
while (i <= mid && j <= end) {
if (nums[i] <= nums[j]) {
temp[k++] = nums[i++];
} else {
temp[k++] = nums[j++];
count = (count + mid - i + 1) % MOD;
}
}
while (i <= mid) {
temp[k++] = nums[i++];
}
while (j <= end) {
temp[k++] = nums[j++];
}
for (i = start, k = 0; i <= end; i++, k++) {
nums[i] = temp[k];
}
return count;
}
int mergeSort(std::vector<int>& nums, int start, int end) {
if (start >= end) {
return 0;
}
int mid = start + (end - start) / 2;
int count = 0;
count = (count + mergeSort(nums, start, mid)) % MOD;
count = (count + mergeSort(nums, mid + 1, end)) % MOD;
count = (count + merge(nums, start, mid, end)) % MOD;
return count;
}
int countInversePairs(std::vector<int>& nums) {
int count = mergeSort(nums, 0, nums.size() - 1);
return count;
}
int main() {
std::vector<int> nums = {7, 5, 6, 4};
int count = countInversePairs(nums);
std::cout << "逆序对的数量为: " << count << std::endl;
return 0;
}