int InversePairs(int* data, int dataLen ) { // write code here static int count = 0; if (dataLen <= 1) return 0; int mid = dataLen / 2, i = 0, j = 0, k = 0, len = dataLen - mid; int datacopyl[mid], datacopyr[len]; for (int w = 0; w < mid; w++) datacopyl[w] = data[w]; for (int w = 0; w < len; w++) datacopyr[w] = data[mid + w]; InversePairs(datacopyl, mid); InversePairs(datacopyr, len); while (i < mid && j < len) { if (datacopyl[i] <= datacopyr[j]) { data[k] = datacopyl[i]; k++; i++; } else { data[k] = datacopyr[j]; count += (mid - i); count %= 1000000007; k++; j++; } } while (i < mid) { data[k++] = datacopyl[i]; i++; } while (j < len) { data[k++] = datacopyr[j]; j++; } return (count % 1000000007); }