#include <iostream>
#include <cstdlib>
using namespace std;
int arr[100000];//原始数组
int sorted[100000];//已排序的数组
long long sum = 0; // 逆序数
//合并过程
void conquer(int left, int mid, int right){
int L = left ;//左起点
int R = mid+1;//右起点
int index = L;
while(L <= mid && R<= right){
if (arr[L] <= arr[R]) {
//左元素 < 右元素, 无逆序数
sorted[index++] = arr[L++];
}
else{
//相反,子逆序数等于L与R之间元素个数
sorted[index++] = arr[R++];
sum += (mid - L + 1);
}
}
//将剩余元素排列放回原数组中
while(L <= mid){
sorted[index++] = arr[L++];
}
while(R<= right){
sorted[index++] = arr[R++];
}
for (int i = left; i <= right; ++i) {
arr[i] = sorted[i];
}
}
//“分”的过程
void divide(int left, int right){
if(left < right){
int mid = (left + right)/2;
divide( left , mid);
divide( mid + 1, right);
conquer(left, mid, right);
}
}
int main(){
int n = 0;