Create Sorted Array through Instructions LeetCode solution in Python
1class Fenwick:2"""Fenwick tree aka binary indexed tree"""34def __init__(self, n):5self.nums = [0] * (n + 1)67def sum(self, k):8ans = 09while k:10ans += self.nums[k]11k &= k - 112return ans1314def add(self, i, x):15i += 116while i < len(self.nums):17self.nums[i] += x18i += i & -i192021class Solution:22def createSortedArray(self, instructions: List[int]) -> int:23ans = 024fen = Fenwick(10**5)25freq = {} # frequency of each instructions26for i, x in enumerate(instructions):27less = fen.sum(x)28more = i - freq.get(x, 0) - less29ans += min(less, more)30fen.add(x, 1)31freq[x] = 1 + freq.get(x, 0)32return ans % 1_000_000_007