3
vector<int> busiestServers(int k, vector<int> &arrival, vector<int> &load) {4
int n = (int)arrival.size();7
for (int i = 0; i < k; i++) freeServers.insert(i);9
vector<int> serverTaskCount(k, 0);11
set<pair<int, int>> workingServers; // [end time, server index]12
for (int i = 0; i < n; i++) {13
int startTime = arrival[i];15
while (!workingServers.empty() && workingServers.begin()->first <= startTime) {16
auto s = *workingServers.begin();17
workingServers.erase(workingServers.begin());18
freeServers.insert(s.second);21
if (freeServers.empty()) continue;24
auto it = freeServers.lower_bound(i % k);25
if (it == freeServers.end()) {26
serverIndex = *freeServers.begin();27
freeServers.erase(freeServers.begin());30
freeServers.erase(it);33
workingServers.insert({startTime + load[i], serverIndex});35
serverTaskCount[serverIndex]++;36
// printf("Task %d (%d, %d) assigned to server %d\n", i, startTime,37
// load[i], serverIndex);39
// for (auto x : serverTaskCount) cout << x << " ";43
int maxVal = *max_element(serverTaskCount.begin(), serverTaskCount.end());44
for (int i = 0; i < k; i++)45
if (maxVal == serverTaskCount[i]) ret.push_back(i);