归并排序和逆序对
ll cnt = 0;
int t[maxn];
void msort(int *a, int l, int r)
{
if (l >= r)
return;
int mid = (l + r) / 2;
msort(a, l, mid);
msort(a, mid + 1, r);
int i = l, j = mid + 1, k = 0;
while (i <= mid && j <= r)
{
if (a[i] <= a[j])
t[k++] = a[i++];
else
t[k++] = a[j++], cnt += mid - i + 1; //逆序对个数
}
while (i <= mid)
t[k++] = a[i++];
while (j <= r)
t[k++] = a[j++];
for (int i = l, j = 0; i <= r;)
a[i++] = t[j++];
}