版权声明:听说这里让写版权声明~~~ https://blog.csdn.net/m0_37691414/article/details/82115073
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
int n;
long long ans;
long long v[500005];
long long temp[500005];
void merge(int low, int mild, int hight){
int i = low, j = mild + 1, k = low;
while(i <= mild && j <= hight){
if(v[i] <= v[j]) temp[k++] = v[i++];
else{
ans += j - k;
temp[k++] = v[j++];
}
}
while(i <= mild) temp[k++] = v[i++];
while(j <= hight) temp[k++] = v[j++];
for(i = low; i <= hight; ++i) v[i] = temp[i];
}
void mergeSort(int start, int end){
if(start < end){
int mild = (start + end)>>1;
mergeSort(start, mild);
mergeSort(mild + 1, end);
merge(start, mild, end);
}
}
int main(){
while(~scanf("%d", &n) && n){
ans = 0;
for(int i = 0; i < n; ++i) scanf("%lld", &v[i]);
mergeSort(0, n - 1);
printf("%lld\n", ans);
}
return 0;
}