求助!!!50分TLE,归并排序,python代码但是C++也这效果

P1908 逆序对

Aslan_warrior @ 2022-11-22 20:33:03

代码如下

def mer(a,l):
    global ans
    if l<=1:
        return a
    mid=l//2
    ll=l-mid
    # 分开
    left=mer(a[:mid],mid)
    right=mer(a[mid:],ll)
    # 合并
    p,q,tel=0,0,list()
    k=mid-p
    while mid>p and ll>q:
        if left[p]>right[q]:
            tel.append(right[q])
            ans+=(mid-p)
            q+=1
        else:
            tel.append(left[p])
            p+=1
    tel.extend(right[q:])
    tel.extend(left[p:])
    return tel
n=int(input())
a=list(map(int,input().split()))
ans=0
mer(a,n)
print(ans)

by Aslan_warrior @ 2022-11-22 20:33:25

求各位大佬帮助! 感谢!


by Aslan_warrior @ 2022-11-23 11:08:22

考虑了是不是python列表操作费时间的情况,改成了直接修改tel列表,但还是超时


def mer(a,l):
    global ans
    global tel
    if l<=1:
        return a
    mid=l//2
    ll=l-mid
    left=mer(a[:mid],mid)
    right=mer(a[mid:],ll)
    p,q,t=0,0,0
    while mid>p and ll>q:
        if left[p]>right[q]:
            tel[t]=right[q]
            ans+=(mid-p)
            q+=1
            t+=1
        else:
            tel[t]=left[p]
            p+=1
            t+=1
    if p<mid:
        tel[t:l]=left[p:]
    if  q<ll:
        tel[t:l]=right[q:]
    return tel[:l]
n=int(input())
a=list(map(int,input().split()))
tel=list(a)
ans=0
mer(a,n)
print(ans)

by FJ_OIer @ 2023-02-01 19:15:27

可以发一下C++的吗,我对Python不咋了解QwQ


|