AcWing 788. 逆序对的数量
原题链接
简单
作者:
码
,
2020-05-18 12:55:18
,
所有人可见
,
阅读 1082
#include<iostream>
using namespace std;
const int N=1e5+10;
int temp[N];
long long f;
long long merge(int *a ,int l,int r)
{
if(l>=r) return 0;
int mid=l+r>>1,l1=l,r1=mid+1,index=0;
merge(a,l,mid),merge(a,mid+1,r);
while(l1<=mid && r1<=r)
if(a[l1]>a[r1]) temp[index++]=a[r1++],f+=mid-l1+1;
else temp[index++]=a[l1++];
while(l1<=mid) temp[index++]=a[l1++];
while(r1<=r) temp[index++]=a[r1++];
for(int i=l,j=0;i<=r;j++,i++) a[i]=temp[j];
return f;
}
int main()
{
int n;
cin>>n;
int a[N];
for(int i=0;i<n;i++) cin>>a[i];
cout<<merge(a,0,n-1);
return 0;
}
f+=mid-i+1,那个mid-i+1是什么意思来着?
中间部分逆序对的数量