定义:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i<j的有序对。
解决:利用归并排序
时间复杂度O(nlogn)
void qiu(int l,int r) { if(l>=r) return; int mid=(l+r)/2; qiu(l,mid); qiu(mid+1,r); int ll=l,rr=mid+1,k=1; while(ll<=mid&&rr<=r) { if(a[ll]>a[rr]) { b[k]=a[rr]; rr++; k++; ans+=mid-ll+1; } else { b[k]=a[ll]; ll++; k++; } } while(ll<=mid) { b[k]=a[ll]; ll++; k++; } while(rr<=r) { b[k]=a[rr]; rr++; k++; } for(int i=l,j=1;i<=r;i++,j++) a[i]=b[j]; }