class AuctionSystem:
def __init__(self):
self.bidForItem = {}
self.userBidVersion = {}
def addBid(self, userId: int, itemId: int, bidAmount: int) -> None:
userBidKey = (userId, itemId)
if userBidKey not in self.userBidVersion:
self.userBidVersion[userBidKey] = 1
else:
self.userBidVersion[userBidKey] += 1
heapKey = (-bidAmount, -userId, self.userBidVersion[userBidKey])
if itemId not in self.bidForItem:
self.bidForItem[itemId] = [heapKey]
else:
heapq.heappush(self.bidForItem[itemId], heapKey)
def updateBid(self, userId: int, itemId: int, newAmount: int) -> None:
self.addBid(userId, itemId, newAmount)
def removeBid(self, userId: int, itemId: int) -> None:
self.addBid(userId, itemId, 0)
def getHighestBidder(self, itemId: int) -> int:
if itemId not in self.bidForItem or len(self.bidForItem[itemId]) == 0:
return(-1)
bidsForItem = self.bidForItem[itemId]
while bidsForItem and (bidsForItem[0][2] != self.userBidVersion[(-bidsForItem[0][1], itemId)] or -bidsForItem[0][0] == 0):
heapq.heappop(bidsForItem)
self.bidForItem[itemId] = bidsForItem
if not bidsForItem:
return(-1)
return(-bidsForItem[0][1])