欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

洛谷pythonP1908逆序对归并

时间:2023-04-27

def merge_sort(arr): s = 0 if len(arr) <= 1: return mid = len(arr) // 2 l = arr[:mid] r = arr[mid:] s += merge_sort(l) + merge_sort(r) i = j = k = 0 while(i < len(l) and j < len(r)): if(l[i] <= r[j]): arr[k] = l[i] i += 1 k += 1 else: arr[k] = r[j] j += 1 k += 1 s += len(l) - i while(i < len(l)): arr[k] = l[i] i += 1 k += 1 while(j < len(r)): arr[k] = r[j] j += 1 k += 1 return sn = int(input())arr = [int(i) for i in input().split()]print(merge_sort(arr))

n=int(input())arr=[0]arr+=[int(x) for x in input().split()]ans=0arr2=[0]*500010def merge(l,r):#归并排序 global ans if l==r: return mid=int((l+r)/2) i=l k=l j=mid+1 merge(l,mid) merge(mid+1,r) while(i<=mid and j<=r): if(arr[i]<=arr[j]): arr2[k]=arr[i] k+=1 i+=1 else: arr2[k]=arr[j] k+=1 j+=1 ans+=(mid-i+1) while(i<=mid): arr2[k]=arr[i] k+=1 i+=1 while(j<=r): arr2[k]=arr[j] k+=1 j+=1 for m in range(l,r):#复制回原数组 arr[m]=arr2[m] print(ans)merge(1,n)print(arr)

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。