自己第一次尝试写归并,怎么这么多tle

P1908 逆序对

xdedb @ 2023-12-28 11:07:42

自己第一次尝试写归并,还是看着题解再去了解的,为什么自己写的归并大都tle了,有没有大佬看看!!!样例能过

#include <iostream>
#include <cstdio>
using namespace std;
void msort(int,int);
int num[500050],tmp[500050];
long long ans=0;
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        scanf("%d",&num[i]);
    }
    msort(0,n-1);
    cout<<ans;
}

void msort(int start,int end){
     int mid=start+(end-start)/2;
    if(start!=end){
        msort(start,mid);
        msort(mid+1,end);
    }else return;

    int m=mid+1,s=start,st=start;
    while(s <= mid && m<=end){
        if(num[s]>num[m]){
            ans=ans+mid-s+1;
            tmp[st++]=num[m++];
        }else if(num[s]<num[m]){
            tmp[st++]=num[s++];
        }
    }
    while(s<=mid){
        tmp[st++]=num[s++];
    }
    while(m<=end){
        tmp[st++]=num[m++];
    }
    for(int i=start;i<=end;i++){
        num[i]=tmp[i];
    }
}

by userLCX @ 2023-12-28 11:21:16

while(s <= mid && m<=end){
        if(num[s]>num[m]){
            ans=ans+mid-s+1;
            tmp[st++]=num[m++];
        }else if(num[s]<num[m]){
            tmp[st++]=num[s++];
        }//else tmp[st++]=num[s++];
    }

相等也要选一个,不然就死循环了。


by GavinCQTD @ 2023-12-28 11:31:53

最难崩的一集


by xdedb @ 2023-12-28 14:53:43

@userLCX 谢谢佬,我好笨哈哈哈哈


|