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