class Solution {
public:
int cnt;
const int MOD = 1000000007;
int InversePairs(vector<int> data) {
vector<int> tmp(data.size());
cnt = 0;
merge_sort(data, 0, data.size(), tmp);
return cnt;
}
void merge_sort(vector<int>& data, int l, int r, vector<int>& tmp) {
if (r - l > 1) {
int m = l + (r - l) / 2, p = l, q = m, i = l;
merge_sort(data, l, m, tmp);
merge_sort(data, m, r, tmp);
while (p < m && q < r) {
if (data[p] <= data[q]) tmp[i++] = data[p++];
else {
cnt = (cnt + (m - p) % MOD) % MOD;
tmp[i++] = data[q++];
}
}
while (p < m) tmp[i++] = data[p++];
while (q < r) tmp[i++] = data[q++];
for (int j = l; j < r; j++) data[j] = tmp[j];
}
}
};