题目描述:
求一个数组求逆序对的数量。
方法与解析:
直接套归并排序的板子,归并板子来自牛客笔记

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
void b_sort(int l,int r);
void bing(int ar1[],int len1,int ar2[],int len2,int ar[],int mid);
int a[N],b[N],n;
long long ans=0;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    b_sort(1,n);
    cout<<ans<<'\n';
    return 0;
}
void b_sort(int l,int r)
{
    if(l==r)return;
    int mid=l+r>>1;
    b_sort(l,mid);
    b_sort(mid+1,r);
    bing(a+l,mid-l+1,a+mid+1,r-mid,b,mid);
    for(int i=l;i<=r;i++)a[i]=b[i-l];
}
void bing(int ar1[],int len1,int ar2[],int len2,int ar[],int mid)
{
    int len=0,i=0,j=0;
    while(i<len1&&j<len2){
        if(ar1[i]<=ar2[j]){
            ar[len++]=ar1[i++];
        }
        else{
            ans+=len1-i;
            ar[len++]=ar2[j++];
        } 
    }
    for(;i<len1;i++)ar[len++]=ar1[i];
    for(;j<len2;j++)ar[len++]=ar2[j];
}