| 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
 
- }
 
 
  |