Untitled
unknown
plain_text
a year ago
1.6 kB
4
Indexable
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;
}
};Editor is loading...
Leave a Comment