| 12345678910111213141516171819202122232425262728293031323334353637 | func countSmaller(nums []int) []int {	n := len(nums)	res := make([]int, n)	if n < 1 {		return res	}	arr := []int{nums[n-1]}	for i := n - 2; 0 <= i; i-- {		l, r, target := 0, n-1-i, nums[i]		for l < r {			m := l + (r-l)/2			if arr[m] < target {				l = m + 1			} else if target < arr[m] {				r = m			} else {				l = m				break			}		}		for 0 < l && arr[l-1] == target {			l-- // Filter out same elements		}		res[i] = l		if l == n-1-i {			arr = append(arr, target)		} else {			tmp := make([]int, n-i)			copy(tmp, arr[:l])			copy(tmp[l+1:], arr[l:])			tmp[l] = target			arr = tmp		}	}	return res}
 |