3 条题解

  • 1
    @ 2025-5-10 10:45:29
    #include<bits/stdc++.h>
    using namespace std;
    const int N=5e6+2840;
    long long n,ans,a[N],b[N];
    void m(int l,int r){
    	if(l==r)return;
    	int mid=l+r>>1;
    	m(l,mid);
    	m(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];
    	}
    	m(1,n);
    	cout<<ans;
    	return 0;
    }
    //带飞
    
    

    信息

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