输入样例:
在这里给出一组输入。例如:
6
-42 23 6 28 -100 65537
输出样例:
在这里给出相应的输出。例如:
5
#include <iostream>
using namespace std;
int count=0;
//合并两个有序线性表 (两个线性表在一个线性表内)== 给数组 A 排序
void Merge(int A[],int low,int mid,int high ){
int B[1000];
int i,j,k;
for(k=low;k<=high;k++){ //复制A到B中
B[k]=A[k];
}
for(i=low,j=mid+1,k=i;i<=mid && j<=high ;k++){ //在B数组中分两段 按顺序两两比较 选取较小的给A数组
if(B[i]<=B[j]) A[k]=B[i++];
else
{
A[k]=B[j++];
count=count+(mid-i+1); // 计算逆序
}
}
while(i<=mid){
A[k++]=B[i++];
}
while(j<=high){
A[k++]=B[j++];
}
}
void MergeSort(int A[],int low ,int high){ // 算法 MergeSort 的递归过程只是将待排集合一分为二,直至待排序列只剩下一个元素为止
if(low<high){
int mid = (low+high)/2;
MergeSort(A,low,mid);
MergeSort(A,mid+1,high);
Merge(A,low,mid,high);
}
}
int main(){
int n;
cin>>n;
int A[1000];
for(int i=0;i<n;i++){
cin>>A[i];
}
MergeSort(A,0,n-1);
cout<<count<<endl;
return 0;
}