1 solutions

  • 0
    @ 2025-11-27 11:59:02

    C++ :

    #include<iostream>
    using namespace std;
    const int N = 3e5+5;
    int n;
    int a[N], b[N];
    long long ans = 0;
    void merge(int l, int r){
    	int mid = l + r >> 1;
    	if(l>=r)
    		return;
    	merge(l, mid);
    	merge(mid+1, r);
    	int i = l, j = mid + 1, k = 0;
    	while(i<=mid && j<=r)	{
    		if(a[i]>a[j])		{
    			ans += mid - i + 1;
    			b[++k] = a[j++];
    		}
    		else
    			b[++k] = a[i++];
    	}
    	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-l+1];
    }
    int main(){
    	cin>>n;
    	for(int i=n;i;i--)
    		cin>>a[i];
    	merge(1, n);
    	cout<<ans;
    	return 0;
    }
    
    
    • 1

    Information

    ID
    121
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By