- 【例2.5】求逆序对
题解
- 2024-5-30 22:02:27 @
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 100010;
int n;
int a[N],tmp[N];
long long merge_sort (int a[],int l,int r)
{
if (l==r)
return 0;
int mid=l+r>>1;
long long ans=merge_sort(a,l,mid)+merge_sort(a,mid+1,r);
int i=l,j=mid+1,k=1;
while(i<=mid&&j<=r)
{
if(a[i]<=a[j])
tmp[k++]=a[i++];
else
tmp[k++]=a[j++],ans+=mid-i+1;
}
while(i<=mid)
tmp[k++]=a[i++];
while(j<=r)
tmp[k++]=a[j++];
for(int i=1,j=l;j<=r;i++,j++)
a[j]=tmp[i];
return ans;
}
signed main () {
cin >> n;
for(int i=1;i<=n;i++)
cin >> a[i];
cout << merge_sort(a,1,n) << endl;
return 0;
}
0 条评论
目前还没有评论...
信息
- ID
- 2294
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 157
- 已通过
- 36
- 上传者