Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include<iostream>using namespace std;int num[100000], buffer[100000];int n;long long MergeSort(int a[], int temp[], int size){if(size == 1)return 0;long long inverse_count = MergeSort(a, temp, size / 2);inverse_count += MergeSort(a + size / 2, temp, size - size / 2);for(int left_index = 0, right_index = size / 2; left_index < size / 2; ++left_index){while(right_index < size && a[right_index] < a[left_index])++right_index;inverse_count += right_index - size / 2;}for(int i = 0; i < size / 2; ++i)temp[i] = a[i];for(int i = size / 2; i < size; ++i)temp[i] = a[size - 1 + size / 2 - i];for(int i = 0, left = 0, right = size - 1; i < size; ++i){if(temp[left] <= temp[right])a[i] = temp[left++];elsea[i] = temp[right--];