引入逆序计数问题作为考察两个序列有多大差别的一个好的度量指标。但是人们可能感觉这个量度太敏感了。如果i<j,并且A[i]>2A[j],我们把这对i,j叫做重要的逆序。设计一个O(nlogn) 的算法计数在两个序列中的重要逆序个数。
方法:归并排序思路,merge我用了两趟归并,一趟是专门求重要逆序数的对数,另一趟是将两个数组进行归并。(我想应该还有更好的方法,将两趟变成一趟)
难点:两个数组归并时,两个数组之间的重要逆序数对数。
与普通的逆序数对数不同:
1.要计算的是ai>2aj的对数。
2.计算重要逆序数对数时,最后剩下一部分数组,不能直接将其长度加到计数器中,只考虑前半部分,如果其中含有比后半部分最大的数还大两倍的数,才需要加(m+1-i)。
int merge_2(int a[], int b[], int l, int m, int r)
{
int num1 = 0;
int i = l;
int j = m + 1;
int k = l;
int t = m - i + 1;
while (i != m + 1 &&a