Untitled
class Solution { public: bool checker(vector <int> &t, vector <int> &w, int pills, int strength, int mid ){ //t from 0 to mid -1 //w from m-mid to m-1 cout << pills << endl; int n = t.size(); int m = w.size(); if(mid > m){ return false; } multiset<int> st(w.end() - mid, w.end()); for(int i = mid-1;i>=0;i--){ auto it = prev(st.end()); if(*it >=t[i]){ st.erase(it); } else if(pills<=0){ return false; } else{ auto it = st.lower_bound(t[i]-strength); if(it!=st.end()){ st.erase(it); pills--; } else{ return false; } } } return true; } int maxTaskAssign(vector<int>& tasks, vector<int>& workers, int pills, int strength) { int n = tasks.size(); int m = workers.size(); sort(tasks.begin(),tasks.end()); sort(workers.begin(),workers.end()); int l = 0; int r = n; int ans = 0; while(l<=r){ int mid = l+(r-l)/2; cout <<"mid " << mid << endl; cout << checker(tasks,workers,pills,strength, mid) << endl; if(checker(tasks,workers,pills,strength, mid)){ l = mid +1; ans = mid; } else{ r = mid -1; } } return ans; } };
Leave a Comment