题目描述
输入描述:
题目保证输入的数组中没有的相同的数字
数据范围:
对于%50的数据,size<=10^4
对于%75的数据,size<=10^5
对于%100的数据,size<=2*10^5
输入
1,2,3,4,5,6,7,0
输出
7
class Solution {
public:
int InversePairs(vector<int> data) {
if(data.empty())
return 0;
vector<int> h=data;
int len=data.size()-1;
long long result =solution(data,h,0,len);
return result%1000000007;
}
long long solution(vector<int> &data,vector<int> &data1,int start,int end)
{
if (data.empty()||data1.empty()||start>end)
return 0;
if (start==end)
{
data1[start]=data[start];
return 0;
}
int mid=(end-start)/2;
long long left=solution(data1,data,start,start+mid);
long long right=solution(data1,data,start+mid+1,end);
int i=start+mid;
int j=end;
int index=end;
long long count=0;
while(i>=start&&j>=(start+mid+1))
{
if (data[i]>data[j])
{
data1[index--]=data[i--];
count=count+j-start-mid;
}
else
data1[index--]=data[j--];
}
for (;i>=start;--i)
{
data1[index--]=data[i];
}
for (;j>=(start+mid+1);--j)
{
data1[index--]=data[j];
}
return left+right+count;
}
};