1 solutions

  • 0
    @ 2024-12-10 23:39:22

    C :

    #include<stdio.h>
    long long a[100010];
    long long b[100010];
    long long count;
    void mergesort(long long *A,int x,int y,long long *T){
    if(y-x>1){
    int m=x+(y-x)/2;
    int p=x,q=m,i=x;
    mergesort(A,x,m,T);
    mergesort(A,m,y,T);
    while(p<m||q<y){
    if(q>=y||p<m&&A[p]<=A[q]) T[i++]=A[p++];
    else {T[i++]=A[q++];count+=m-p;}}
    for(i=x;i<y;i++) A[i]=T[i];}}
    
    int main(){
    int N;
    while(scanf("%d",&N)!=EOF){
        int i;
        for(i=0;i<N;i++) scanf("%lld",&a[i]);
        count=0;
        mergesort(a,0,N,b);
        printf("%lld\n",count);
    }
    return 0;}
    

    C++ :

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int maxn=100000+10;
    int  a[maxn],t[maxn];
    long long ans;
    void Sort(int l,int r)
    {
        if(l==r)
            return;
        int mid=(l+r)/2;
        Sort(l,mid);
        Sort(mid+1,r);
        int i=l,j=mid+1,now=0;
        while(i<=mid&&j<=r)
        {
            if(a[i]>a[j])
            {
                ans+=mid-i+1;
                t[++now]=a[j++];
            }
            else
                t[++now]=a[i++];
        }
        while(i<=mid)
            t[++now]=a[i++];
        while(j<=r)
            t[++now]=a[j++];
        now=0;
        for(int k=l;k<=r;k++)
            a[k]=t[++now];
    
    }
    int main()
    {
        int n;
        int i;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
            scanf("%d",&a[i]);
            ans=0;
        Sort(1,n);
        cout<<ans<<endl;
        return 0;
    
    }
    
    
    • 1

    Information

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