Python Folks : Heavily Commented , you might learn something new here about sortedcontainers.
DataStructures Used : Priority Queue, SortedList\nDocumentation of sorted list: \nhttp://www.grantjenks.com/docs/sortedcontainers/sortedlist.html\n\n\nfrom sort
DataStructures Used : Priority Queue, SortedList\nDocumentation of sorted list: \nhttp://www.grantjenks.com/docs/sortedcontainers/sortedlist.html\n\n```\nfrom sortedcontainers import SortedList\nclass Solution:\n    def getNextServer(self, index , sortedAvailableServers):\n        nextIndexToRightOfServer = sortedAvailableServers.bisect_left(index)\n        # Since We need to find next server availble greater than this index\n        if nextIndexToRightOfServer != len(sortedAvailableServers):\n            return sortedAvailableServers[nextIndexToRightOfServer]\n        # No server greater than index found , means move in cycle and find the lowest avaiable server now\n        lowestIdServerAvailable = sortedAvailableServers.bisect_left(0)\n        return sortedAvailableServers[lowestIdServerAvailable]\n                \n    def busiestServers(self, k: int, arrival: List[int], load: List[int]) -> List[int]:\n        heap = [] \n        # This heap will be use to make servers as free , the first server to become free will be top element of heap\n        \n        sortedAvailableServers = SortedList([i for i in range(k)])      \n        # This sorted available server list will be used to assign the load to new server , more comment in function \n        \n        count = collections.defaultdict(int)\n        # This count dictionary will be used to record the count of request each server has handled, will be used in calculating result\n        \n        for i in range(len(arrival)):\n            arrivalTime,loadTime = arrival[i], load[i]\n            # ArrivalTime and loadTime , SimpleStuff\n            \n            # Check if any server has become free now, since top of heap will contain the first server which will get free\n            # we just compare top server free time with currentTime and mark the server as free if possible\n            while len(heap) > 0 and heap[0][0] <= arrivalTime:\n                _,serverId = heapq.heappop(heap)\n                # after marker this server free add it to list of free Servers\n                sortedAvailableServers.add(serverId)\n\n            #Check for any server Available\n            if len(sortedAvailableServers) == 0:\n                # Drop this Request because no server available\n                continue\n            \n            # Get the assigned serverId for this Request\n            assignedServer = self.getNextServer(i%k,sortedAvailableServers)\n            \n            count[assignedServer] += 1 # increase requestcount of this server by 1\n            sortedAvailableServers.remove(assignedServer) # remove this server from list of free server\n            heapq.heappush(heap,(arrivalTime+loadTime,assignedServer)) # insert this server in heap with free time as arrivalTime+loadTime\n        \n        # get the max request servered by any server\n        maxRequestServedCount = max(count.values())\n        result = []\n        \n        #iterate and pick all servers which servered maxRequest\n        for serverId in count:\n            if count[serverId] == maxRequestServedCount:\n                result.append(serverId)\n\n        return result\n        \n                \n```
[]