3
int maxTaskAssign(vector<int> &tasks, vector<int> &workers, int pills, int strength) {4
sort(begin(workers), end(workers));5
sort(begin(tasks), end(tasks));7
int lTasks = -1, rTasks = min(tasks.size(), workers.size()) - 1;9
while (lTasks < rTasks) {10
int midTasks = (lTasks + rTasks + 1) >> 1, t = midTasks;13
for (int w = workers.size() - 1, freePills = pills; t >= 0; t--) {14
if (dq.size() > 0 && dq.front() >= tasks.at(t)) {16
} else if (w >= 0 && workers.at(w) >= tasks.at(t)) {18
} else if (freePills > 0) {19
while (w >= 0 && workers.at(w) + strength >= tasks.at(t)) dq.push_back(workers.at(w--));21
if (dq.size() == 0) break;22
dq.pop_back(), freePills--;27
t == -1 ? lTasks = midTasks : rTasks = midTasks - 1;