求助!!!
查看原帖
求助!!!
457593
皇族鬼圣楼主2022/10/3 10:13
#include<iostream>
using namespace std;
int a[500005],b[500005];
long long ans=0;
void mergesort(int l, int r)
{
    if(l>=r)
        return;

    int mid = (l+r)>>1;
    mergesort(l, mid);
    mergesort(mid+1, r);

    int left[50005], right[50005];
    int lth1 = mid - l + 1, lth2 = r - mid;
    for(int i=1;i<=lth1;i++)
        left[i] = a[l+i-1];
    for(int i=1;i<=lth2;i++)
        right[i] = a[mid+i];

    int i = 1, j = 1;
    int k = l;
    while(i<=lth1 && j<=lth2)
    {
        if(left[i]<right[j])
            a[k++] = left[i++];
        else
        {
        	a[k++] = right[j++];
        	ans+=mid-l+1;
		}
    }
    while(i<=lth1)
        a[k++] = left[i++];
    while(j<=lth2)
        a[k++] = right[j++];
}

int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    mergesort(0, n-1);
        cout<<ans;
    return 0;
}
2022/10/3 10:13
加载中...