1
# Runtime: 6019 ms (Top 15.52%) | Memory: 35.5 MB (Top 33.31%)3
def countSmaller(self, nums: List[int]) -> List[int]:4
# build the binary indexed tree7
) # 10**4 negative + 10**4 positive numbers + bucket at 010
) # add 1 because binary indexed tree data starts at index 112
result = [0] * len(nums)14
# iterate from right to left15
for result_index in range(len(nums) - 1, -1, -1):16
n = nums[result_index]17
# add 10**4 to n to account for negative numbers20
# convert to 1-based index for the tree22
# perform range sum query of buckets [-inf, n-1], where n is current number23
# because we want n - 1 for range sum query of [-inf, n-1], not n, subtract 1 from i:29
# get parent node by subtracting least significant set bit32
result[result_index] = val34
# update the binary indexed tree with new bucket39
# get next node to update by adding the least significant set bit