C++ solution
Intuition\n Describe your first thoughts on how to solve this problem. \n\n# Approach\n Describe your approach to solving the problem. \n\n# Complexity\n- Time 
# Intuition\n<!-- Describe your first thoughts on how to solve this problem. -->\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```\nclass Solution {\n public:\n  vector<int> busiestServers(int k, vector<int>& arrival, vector<int>& load) {\n    vector<int> ans;\n    vector<int> times(k);\n    set<int> idleServers;\n    // (endTime, server)\n    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> minHeap;\n\n    for (int i = 0; i < k; ++i)\n      idleServers.insert(i);\n\n    for (int i = 0; i < arrival.size(); ++i) {\n      // Pop all servers that are available now.\n      while (!minHeap.empty() && minHeap.top().first <= arrival[i]) {\n        idleServers.insert(minHeap.top().second);\n        minHeap.pop();\n      }\n      // Get next available server.\n      const int server = getNextAvailableServer(idleServers, i, k);\n      if (server == -1)\n        continue;\n      ++times[server];\n      minHeap.emplace(arrival[i] + load[i], server);\n      idleServers.erase(server);\n    }\n\n    const int busiest = *max_element(times.begin(), times.end());\n    for (int i = 0; i < k; ++i)\n      if (times[i] == busiest)\n        ans.push_back(i);\n    return ans;\n  }\n\n private:\n  int getNextAvailableServer(const set<int>& idleServers, int ithRequest,\n                             int k) {\n    if (idleServers.empty())\n      return -1;\n    const auto it = idleServers.lower_bound(ithRequest % k);\n    return it == idleServers.cend() ? *idleServers.begin() : *it;\n  }\n};\n\n```
['C++']