Design a Leaderboard class, which has 3 functions:

1. `addScore(playerId, score)`: Update the leaderboard by adding `score` to the given player's score. If there is no player with such id in the leaderboard, add him to the leaderboard with the given `score`.
2. `top(K)`: Return the score sum of the top `K` players.
3. `reset(playerId)`: Reset the score of the player with the given id to 0 (in other words erase it from the leaderboard). It is guaranteed that the player was added to the leaderboard before calling this function.

Example 1:

``````Input:
[[],[1,73],[2,56],[3,39],[4,51],[5,4],[1],[1],[2],[2,51],[3]]
Output:
[null,null,null,null,null,null,73,null,null,null,141]

Explanation:
• `1 <= playerId, K <= 10000`
• It's guaranteed that `K` is less than or equal to the current number of players.
• `1 <= score <= 100`
• There will be at most `1000` function calls.
 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 `````` ``````class Leaderboard: def __init__(self): self.all_scores_sorted = [] self.id_to_score = {} def addScore(self, playerId: int, score: int) -> None: if playerId in self.id_to_score: score_to_remove = self.id_to_score[playerId] self.all_scores_sorted.remove(score_to_remove) score += score_to_remove self.id_to_score[playerId] = score insort(self.all_scores_sorted, score) def top(self, K: int) -> int: return sum(self.all_scores_sorted[-K:]) def reset(self, playerId: int) -> None: score_to_remove = self.id_to_score[playerId] self.all_scores_sorted.remove(score_to_remove) del self.id_to_score[playerId] # Your Leaderboard object will be instantiated and called as such: # obj = Leaderboard() # obj.addScore(playerId,score) # param_2 = obj.top(K) # obj.reset(playerId) class Leaderboard: def __init__(self): self.scores = {} def addScore(self, playerId: int, score: int) -> None: self.scores[playerId] = self.scores.get(playerId, 0) + score def top(self, K: int) -> int: heap= [] for x in self.scores.values(): heapq.heappush(heap, x) if len(heap) > K: heapq.heappop(heap) return sum(heap) def reset(self, playerId: int) -> None: self.scores[playerId] = 0``````