From cc97562644962adf073f3bb6c28d2dd10168b778 Mon Sep 17 00:00:00 2001 From: Soriful Islam Sk Date: Sun, 5 Oct 2025 11:13:16 +0530 Subject: [PATCH] 2071. Maximum Number of Tasks You Can Assign.cpp --- ...Maximum Number of Tasks You Can Assign.cpp | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 2071. Maximum Number of Tasks You Can Assign.cpp diff --git a/2071. Maximum Number of Tasks You Can Assign.cpp b/2071. Maximum Number of Tasks You Can Assign.cpp new file mode 100644 index 0000000..176f0d6 --- /dev/null +++ b/2071. Maximum Number of Tasks You Can Assign.cpp @@ -0,0 +1,49 @@ +class Solution { +public: + int maxTaskAssign(vector& tasks, vector& workers, int pills, int strength) { + sort(tasks.begin(), tasks.end()); + sort(workers.begin(), workers.end()); + + int low = 0, high = min(tasks.size(), workers.size()); + + while (low < high) { + int mid = (low + high + 1) / 2; + if (canAssign(tasks, workers, pills, strength, mid)) { + low = mid; + } else { + high = mid - 1; + } + } + + return low; + } + +private: + bool canAssign(const vector& tasks, const vector& workers, + int pills, int strength, int taskCount) { + deque boosted; + int w = workers.size() - 1; + int freePills = pills; + + for (int t = taskCount - 1; t >= 0; --t) { + int task = tasks[t]; + + if (!boosted.empty() && boosted.front() >= task) { + boosted.pop_front(); + } else if (w >= 0 && workers[w] >= task) { + --w; + } else { + while (w >= 0 && workers[w] + strength >= task) { + boosted.push_back(workers[w--]); + } + if (boosted.empty() || freePills == 0) { + return false; + } + boosted.pop_back(); + --freePills; + } + } + + return true; + } +};