| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | func reversePairs(nums []int) int {	return mergeSort(nums, 0, len(nums)-1)}func mergeSort(nums []int, beg int, end int) int {	if end <= beg {		return 0	}	l, m := beg, beg+(end-beg)/2	r, p, k := m+1, m+1, 0	res := mergeSort(nums, beg, m) + mergeSort(nums, r, end)	merge := make([]int, end-beg+1)	for l <= m {		for ; p <= end && 2*nums[p] < nums[l]; p++ {		} // Advance l once each loop to calculate the cnt of reverse pairs		res += p - m - 1		for r <= end && nums[r] <= nums[l] {			merge[k] = nums[r]			k, r = k+1, r+1		}		merge[k] = nums[l]		k, l = k+1, l+1	}	for r <= end {		merge[k] = nums[r]		k, r = k+1, r+1	}	copy(nums[beg:end+1], merge)	return res}// ---------------------dividing line for TLE binary search algorithm---------------------type ints [][]intfunc (is ints) search(x int, beg int, end int) int {	for beg <= end {		mid := beg + (end-beg)/2		if is[mid][0] < x {			beg = mid + 1		} else {			end = mid - 1		}	}	return beg}func (is *ints) insert(x int) int {	beg, end := 0, len(*is)	beg = is.search(2*x+1, beg, end-1)	cnt := 0	for i := beg; i < end; i++ {		cnt += (*is)[i][1]	}	if beg == end {		beg--	}	if x < 0 {		beg = is.search(x, 0, end-1)	} else {		beg = is.search(x, 0, beg)	}	if beg == end {		*is = append(*is, []int{x, 1})	} else if (*is)[beg][0] == x {		(*is)[beg][1]++	} else {		nis := make([][]int, end+1)		copy(nis, (*is)[:beg])		nis[beg] = []int{x, 1}		copy(nis[beg+1:], (*is)[beg:])		*is = nis	}	return cnt}func reversePairsTLE(nums []int) (cnt int) {	var is ints = make([][]int, 0)	for _, i := range nums {		cnt += is.insert(i)	}	return}
 |