在一個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為一個逆序。一個排列中逆序的總數就稱為這個排列的逆序數。
現在,給你一個N個元素的序列,請你判斷出它的逆序數是多少。
比如 1 3 2 的逆序數就是1。
2 2 1 1 3 1 3 2
0 1
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=1000001;
int a[maxn],b[maxn];
long long sum;
/**
歸並
*/
void Merge(int begin,int mid,int end){
int i=begin,j=mid+1,pos=begin;
//對一個個序列排序的過程
while(i<=mid && j<=end){
if(a[i]<=a[j]){
b[pos++]=a[i++];
}else{
b[pos++]=a[j++];
sum+=mid-i+1;//求逆序數
}
}
while(i<=mid) b[pos++]=a[i++];
while(j<=end) b[pos++]=a[j++];
for(int i=begin,j=begin;i<=end;i++,j++)
a[i]=b[j];
}
/**
排序
*/
void Sort(int begin,int end){
if(begin<end){ int="" mid="(begin+end)/2;" sum="0;" i="1;i<=n;i++)" return="" pre="">
</end){></algorithm></cstring></cstdio>