Calculate the number of exchanges made by sorting each time.
Question: calculate the number of reverse orders by means of Merge Sorting
# Include <cstdio> int A [500000], B [500000]; long CNT, N; void mergesort (INT L, int R) {If (L> = r) return; int mid = (L + r)/2; mergesort (L, mid); mergesort (Mid + 1, R); int I = L, j = Mid + 1, k = L; while (I <= Mid & J <= r) {if (a [I]> A [J]) {B [k ++] = A [J ++]; CNT + = mid-I + 1;/* A [I]> A [J], indicates that a reverse order is displayed, because a [I .. m] is already ordered, so a [I + 1], a [I + 2],... A [m] is greater than a [J] and can both form a [J] in reverse order. Therefore, number + = m-I + 1 */} els EB [k ++] = A [I ++];} while (I <= mid) B [k ++] = A [I ++]; while (j <= r) B [k ++] = A [J ++]; for (I = L; I <= r; I ++) A [I] = B [I];} int main () {While (scanf ("% d", & N) & n! = 0) {for (INT I = 0; I <n; I ++) scanf ("% d", & A [I]); CNT = 0; mergesort (0, n-1); printf ("% LLD \ n", CNT);} return 0 ;}