4 条题解

  • -2
    @ 2024-8-5 15:11:13

    #include<bits/stdc++.h>

    using namespace std;

    const int N=1e6;

    typedef long long ll;

    int a[N],b[N],n;

    ll total=0;

    inline int read()

    {

    char c=getchar();int num=0;
    
    for(;!isdigit(c);c=getchar());
    
    for(;isdigit(c);c=getchar())
    
        num=num*10+c-'0';
        
    return num;
    

    }

    void mergesort(int l,int r){

    if(l==r)
    
    	return;
    
    int mid=(l+r)/2;
    
    mergesort(l,mid);	
    
    mergesort(mid+1,r);
    
    int x=l,y=mid+1,z=l;
    
    while(x<=mid&&y<=r){
    
    	if(a[x]>a[y]){
    
    		b[z++]=a[y++];	
      
    		total=total+mid-x+1;
      
    	}
    
    	else
    
    		b[z++]=a[x++];
      
    }
    
    while(x<=mid)
    
    	b[z++]=a[x++];
    
    while(y<=r)
    
    	b[z++]=a[y++];
    
    for(int i=l;i<=r;i++)
    
    	a[i]=b[i];
    

    }

    int main() {

    cin>>n;
    
    for(int i=1;i<=n;i++)
    
    	a[i]=read();
    
    mergesort(1,n);
    
    cout<<total<<endl;
    
    return 0;
    

    }

    信息

    ID
    1029
    时间
    1000ms
    内存
    128MiB
    难度
    8
    标签
    (无)
    递交数
    17
    已通过
    6
    上传者