Java - TreeSet & PriorityQueue - 131 ms, faster than 44.71% - 62.4 MB, less than 7.45%
\nclass Solution {\n    public List<Integer> busiestServers(int k, int[] arrival, int[] load) {\n        TreeSet<Integer> available = new TreeSet<>();\n        
```\nclass Solution {\n    public List<Integer> busiestServers(int k, int[] arrival, int[] load) {\n        TreeSet<Integer> available = new TreeSet<>();\n        int[] cnts = new int[k];\n        int maxCnt = 0;\n        List<Integer> res = new ArrayList<>();\n        for (int i = 0; i < k; ++i) {\n            available.add(i);\n        }\n        PriorityQueue<int[]> pq = new PriorityQueue<>(Comparator.comparingInt(a -> a[1]));\n        int n = load.length;\n        for (int i = 0; i < n; ++i) {\n            int start = arrival[i];\n            while (!pq.isEmpty() && pq.peek()[1] <= start) {\n                available.add(pq.poll()[0]);\n            }\n            if (available.isEmpty()) {\n                continue;\n            }\n            Integer server = available.ceiling(i % k);\n            if (server == null) {\n                server = available.first();\n            }\n            available.remove(server);\n            pq.offer(new int[]{server, start + load[i]});\n            if (++cnts[server] >= maxCnt) {\n                if (cnts[server] > maxCnt) {\n                    maxCnt = cnts[server];\n                    res.clear();\n                }\n                res.add(server);\n            }\n        }\n        return res;\n    }\n}\n```
[]