classAuctionSystem:def__init__(self):self.items=defaultdict(SortedList)self.users={}defaddBid(self,userId:int,itemId:int,bidAmount:int)->None:ifuserIdnotinself.users:self.users[userId]={}ifitemIdinself.users[userId]:self.removeBid(userId,itemId)self.users[userId][itemId]=bidAmountself.items[itemId].add((bidAmount,userId))defupdateBid(self,userId:int,itemId:int,newAmount:int)->None:oldAmount=self.users[userId][itemId]self.items[itemId].remove((oldAmount,userId))self.items[itemId].add((newAmount,userId))self.users[userId][itemId]=newAmountdefremoveBid(self,userId:int,itemId:int)->None:oldAmount=self.users[userId][itemId]self.items[itemId].remove((oldAmount,userId))self.users[userId].pop(itemId)defgetHighestBidder(self,itemId:int)->int:ls=self.items[itemId]return-1ifnotlselsels[-1][1]# Your AuctionSystem object will be instantiated and called as such:# obj = AuctionSystem()# obj.addBid(userId,itemId,bidAmount)# obj.updateBid(userId,itemId,newAmount)# obj.removeBid(userId,itemId)# param_4 = obj.getHighestBidder(itemId)
classAuctionSystem{privatefinalMap<Integer,TreeSet<int[]>>items=newHashMap<>();privatefinalMap<Integer,Map<Integer,Integer>>users=newHashMap<>();publicAuctionSystem(){}publicvoidaddBid(intuserId,intitemId,intbidAmount){users.computeIfAbsent(userId,k->newHashMap<>());if(users.get(userId).containsKey(itemId)){removeBid(userId,itemId);}users.get(userId).put(itemId,bidAmount);items.computeIfAbsent(itemId,k->newTreeSet<>((a,b)->a[0]!=b[0]?Integer.compare(a[0],b[0]):Integer.compare(a[1],b[1])));items.get(itemId).add(newint[]{bidAmount,userId});}publicvoidupdateBid(intuserId,intitemId,intnewAmount){intoldAmount=users.get(userId).get(itemId);TreeSet<int[]>set=items.get(itemId);set.remove(newint[]{oldAmount,userId});set.add(newint[]{newAmount,userId});users.get(userId).put(itemId,newAmount);}publicvoidremoveBid(intuserId,intitemId){intoldAmount=users.get(userId).get(itemId);TreeSet<int[]>set=items.get(itemId);set.remove(newint[]{oldAmount,userId});users.get(userId).remove(itemId);}publicintgetHighestBidder(intitemId){TreeSet<int[]>set=items.get(itemId);if(set==null||set.isEmpty()){return-1;}returnset.last()[1];}}/** * Your AuctionSystem object will be instantiated and called as such: * AuctionSystem obj = new AuctionSystem(); * obj.addBid(userId,itemId,bidAmount); * obj.updateBid(userId,itemId,newAmount); * obj.removeBid(userId,itemId); * int param_4 = obj.getHighestBidder(itemId); */
classAuctionSystem{unordered_map<int,set<pair<int,int>>>items;unordered_map<int,unordered_map<int,int>>users;public:AuctionSystem(){}voidaddBid(intuserId,intitemId,intbidAmount){if(users[userId].count(itemId)){removeBid(userId,itemId);}users[userId][itemId]=bidAmount;items[itemId].insert({bidAmount,userId});}voidupdateBid(intuserId,intitemId,intnewAmount){intoldAmount=users[userId][itemId];auto&s=items[itemId];s.erase({oldAmount,userId});s.insert({newAmount,userId});users[userId][itemId]=newAmount;}voidremoveBid(intuserId,intitemId){intoldAmount=users[userId][itemId];auto&s=items[itemId];s.erase({oldAmount,userId});users[userId].erase(itemId);}intgetHighestBidder(intitemId){autoit=items.find(itemId);if(it==items.end()||it->second.empty()){return-1;}returnit->second.rbegin()->second;}};/** * Your AuctionSystem object will be instantiated and called as such: * AuctionSystem* obj = new AuctionSystem(); * obj->addBid(userId,itemId,bidAmount); * obj->updateBid(userId,itemId,newAmount); * obj->removeBid(userId,itemId); * int param_4 = obj->getHighestBidder(itemId); */