3 条题解

  • 0
    @ 2025-5-10 10:43:59

    归并排序

    #include<bits/stdc++.h>
    using namespace std;
    const int N=5e5+5,INF=0x3f3f3f3f;
    typedef long long LL;
    LL n,a[N],b[N],ans;
    void mergesort(int l,int r){
    	if(l==r)return;
    	int mid=l+r>>1;
    	mergesort(l,mid);
    	mergesort(mid+1,r);
    	int i=l,j=mid+1,k=l;
    	while(i<=mid&&j<=r){
    		if(a[i]<=a[j])b[k++] = a[i++];
    		else b[k++] = a[j++],ans+=mid-i+1;
    	}
    	while(i<=mid)b[k++] = a[i++];
    	while(j<=r)b[k++] = a[j++];
    	for(int i=l;i<=r;i++)a[i] = b[i];
    }
    int main()
    {
    	cin>>n;
    	for(int i=1;i<=n;i++)cin>>a[i];
    	mergesort(1,n);
    	cout<<ans;
    	return 0;
    }
    

    信息

    ID
    1252
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    71
    已通过
    23
    上传者