Simple JS solution using three heaps
Intuition\nIntuition is to keep min server to assign after ith request for that keep min to the right and min to the left. As requseted in problem, assign from 
# Intuition\nIntuition is to keep min server to assign after ith request for that keep min to the right and min to the left. As requseted in problem, assign from right min, if empty then from left min, else drop request.\n\nAlso keep track of all the request end time to keep track of available and occupied servers\n\n# Approach\n<!-- Describe your approach to solving the problem. -->\n\n# Complexity\n- Time complexity:\n<!-- Add your time complexity here, e.g. $$O(n)$$ -->\n\n- Space complexity:\n<!-- Add your space complexity here, e.g. $$O(n)$$ -->\n\n# Code\n```\n/**\n * @param {number} k\n * @param {number[]} arrival\n * @param {number[]} load\n * @return {number[]}\n */\nvar busiestServers = function(k, arrival, load) {\n    let beforeMin = new MinPriorityQueue();\n    let afterMin = new MinPriorityQueue();\n    const endTimeMinHeap = new MinPriorityQueue({ priority: (ser) => ser.endTime});\n\n    for (let i = 0; i < k; i++) {\n        beforeMin.enqueue(i); // populate available servers\n    }\n\n    let serversUseCount = new Array(k).fill(0);\n\n    for (let i = 0; i < arrival.length; i++) {\n        let startTime = arrival[i];\n        let reqLoad = load[i];\n\n        let serverId = i % k;\n\n        // if server 0 then loopback\n        if (serverId === 0) {\n            afterMin = beforeMin;\n            beforeMin = new MinPriorityQueue();\n        }\n\n        // free up freeServers\n        freeServers(endTimeMinHeap, beforeMin, afterMin, startTime, serverId);\n\n        // assign from after. if no avail then from before else drop\n        let serverToUse;\n        if (!afterMin.isEmpty()) {\n            serverToUse = afterMin;\n        } else if (!beforeMin.isEmpty()) {\n            serverToUse = beforeMin;\n        } else {\n            // drop\n            continue;\n        }\n\n        let _serId = serverToUse.dequeue().element;\n        endTimeMinHeap.enqueue({ serverId: _serId, endTime: startTime + reqLoad });\n        \n        // inc server use count\n        serversUseCount[_serId]++;\n    }\n\n    let max = Math.max(...serversUseCount);\n    let output = [];\n    for (let i = 0; i < serversUseCount.length; i++) {\n        if (max === serversUseCount[i]) output.push(i)\n    }\n    return output;\n};\n\nfunction freeServers(endTimeMinHeap, beforeMin, afterMin, startTime, serverId) {\n    while(!endTimeMinHeap.isEmpty() && endTimeMinHeap.front().element.endTime <= startTime) {\n        const ser = endTimeMinHeap.dequeue().element;\n        if (ser.serverId < serverId) beforeMin.enqueue(ser.serverId);\n        else afterMin.enqueue(ser.serverId);\n    }\n}\n```
['Array', 'Heap (Priority Queue)', 'JavaScript']