leetcode

Leetcode Solutions (0x6A73)
git clone https://git.pngu.org/leetcode
Log | Files | Refs | Submodules | README

fancy_sequence.py (1174B)


# 1622. Fancy Sequence

"""
write an api that generates fancy sequences using the 'append', 'addAll', and
'multAll' operations.
"""


class Fancy:
    def __init__(self):
        self.a = []
        self.add = [0]
        self.mult = [1]
        self.mod = 10**9 + 7

    def append(self, val: int) -> None:
        self.a.append(val)
        self.add.append(self.add[-1])
        self.mult.append(self.mult[-1])

    def addAll(self, inc: int) -> None:
        self.add[-1] += inc

    def multAll(self, m: int) -> None:
        self.add[-1] = self.add[-1] * m % self.mod
        self.mult[-1] = self.mult[-1] * m % self.mod

    def getIndex(self, idx: int) -> int:
        if idx >= len(self.a):
            return -1
        m = self.mult[-1] * pow(self.mult[idx], self.mod - 2, self.mod)
        inc = self.add[-1] - self.add[idx] * m
        return (self.a[idx] * m + inc) % self.mod


if __name__ == "__main__":
    obj = Fancy()
    obj.append(2)
    obj.addAll(3)
    obj.append(7)
    obj.multAll(2)
    print(obj.getIndex(0))
    obj.addAll(3)
    obj.append(10)
    obj.multAll(2)
    print(obj.getIndex(0))
    print(obj.getIndex(1))
    print(obj.getIndex(2))