# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.result=0
def InversePairs(self, data):
# write code here
self.splits(data)
return self.result%1000000007
def splits(self,data):
if len(data)<=1:
return data
mid=len(data)//2
left=self.splits(data[:mid])
right=self.splits(data[mid:])
return self.ranks(left, right)
def ranks(self,left,right):
l=0
r=0
ret=[]
while l<len(left) and r<len(right):
if left[l]>right[r]:
ret.append(right[r])
r+=1
self.result+=len(left)-l ##关键点,其他都是归并过程,只有这步计算次数
else:
ret.append(left[l])
l+=1
ret+=left[l:]
ret+=right[r:]
return ret