class FenwickTree: def __init__(self, SIZE): # create fenwick tree with size SIZE self.Size = SIZE self.ft = [0 for i in range (0,SIZE)] def update(self, i, val): # update data (adding) in index i in O(lg N) while (i < self.Size): self.ft[i] += val i += i & (-i) def query(self, i): # query cumulative data from index 0 to i in O(lg N) ret = 0 while (i > 0): ret += self.ft[i] i -= i & (-i) return ret if __name__ == '__main__': f = FenwickTree(100) f.update(1,20) f.update(4,4) print(f.query(1)) print(f.query(3)) print(f.query(4)) f.update(2,-5) print(f.query(1)) print(f.query(3))