void mergesort(int x, int y) {
if (x >= y) return;
int mid = (x + y) / 2;
mergesort(x, mid);
mergesort(mid + 1, y);
merge(x, mid, y);
}
void merge(int low, int mid, int high) {
int i = low, j = mid + 1, k = low;
while (i <= mid && j <= high) {
if (a[i] < a[j])
b[k++] = a[i++];
else {
b[k++] = a[j++];
ans += mid + 1 - i;
}
}
while (i <= mid) b[k++] = a[i++];
while (j <= high) b[k++] = a[j++];
for (int i = low; i <= high; i++) a[i] = b[i];
}
在归并排序的基础上统计逆序对的个数。