class Solution:
    def busiestServers(self, k: int, arrival: List[int], load: List[int]) -> List[int]:
        """
        k server 
        each server 1 req / time
        for req[i]:
      (1)      if len(avail) <1 : req.drop()
      (2)      if (i%k) server available, assign req 
            else:
      (3)         (i%k) next available  server    =>  loop  server id from status map ?    =>!!! two heaps 
     
   availabler servers: once expected available time <= cur_t  
   time :  keep increasing 
   pq (available time, server_idx, cnt)
   server_status = {idx: T/F}  Ture: available False: busy 
   return list of busiest server id  
        """
   class Solution:
    def busiestServers(self, k: int, A: List[int], B: List[int]) -> List[int]:
        """
        main idea: 3 heaps 
        1 heap : sort the busy server with its available time  (available time, server_idx ) 
        2 heaps   server idx before and after current desired server id  (i%k)    
        """
        request_per_server = [0] * k  
        busy_servers = [] 
        before, after = [],list(range(k))
        
        for i,(t,ld) in enumerate(zip(A,B)):
            server_id = i%k
            if server_id == 0: # loopback 
                before = after
                after = [] 
                
            while busy_servers and busy_servers[0][0] <= t :
                available_server_id = heappop(busy_servers)[1]
                if available_server_id < server_id :
                    heappush(before,available_server_id)
                else:
                    heappush(after,available_server_id) # after queue contains id  >= server_id
            
            
            available_servers = after if after else before # prioritize after than before 
            if not available_servers : continue # drop current job
            cur_server_id = heappop(available_servers)
            request_per_server[cur_server_id] += 1 
            heappush(busy_servers,(t+ld,cur_server_id))
            
        maxreq = max(request_per_server)
        return [i for i,reqs in enumerate(request_per_server) if reqs == maxreq]