#include <iostream>
#include <algorithm>
#include <vector>
#include <unordered_map>
using namespace std;
void checkType(vector<int> &memories, int &ans, int &availableMemory) {
sort(memories.begin(), memories.end());
int i = 0, n = memories.size();
while (i < n) {
if (i == n - 1) {
ans++;
i++;
continue;
}
if (memories[i] + memories[i + 1] <= availableMemory) {
ans++;
i += 2;
}
else {
ans++;
i++;
}
}
}
int minimumTime(int availableMemory, vector<int> taskMems, vector<int> taskTypes) {
int n = taskMems.size();
int ans = 0, i, j;
unordered_map<int, vector<int>> tasksOfType;
unordered_map<int, vector<int>>::iterator it;
for (int i = 0; i < n; i++) {
tasksOfType[taskTypes[i]].push_back(taskMems[i]);
}
for (it = tasksOfType.begin(); it != tasksOfType.end(); it++) {
checkType(it->second, ans, availableMemory);
}
return ans;
}
int main() {
vector<int> task_memory = {2, 3, 4, 2, 3};
vector<int> task_type = {1, 2, 1, 1, 2};
int max_memory = 5;
cout << minimumTime(max_memory, task_memory, task_type);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIGNoZWNrVHlwZSh2ZWN0b3I8aW50PiAmbWVtb3JpZXMsIGludCAmYW5zLCBpbnQgJmF2YWlsYWJsZU1lbW9yeSkgewoJc29ydChtZW1vcmllcy5iZWdpbigpLCBtZW1vcmllcy5lbmQoKSk7CglpbnQgaSA9IDAsIG4gPSBtZW1vcmllcy5zaXplKCk7Cgl3aGlsZSAoaSA8IG4pIHsKCQlpZiAoaSA9PSBuIC0gMSkgewoJCQlhbnMrKzsKCQkJaSsrOwoJCQljb250aW51ZTsKCQl9CgkJaWYgKG1lbW9yaWVzW2ldICsgbWVtb3JpZXNbaSArIDFdIDw9IGF2YWlsYWJsZU1lbW9yeSkgewoJCQlhbnMrKzsKCQkJaSArPSAyOwoJCX0KCQllbHNlIHsKCQkJYW5zKys7CgkJCWkrKzsKCQl9Cgl9Cn0KCmludCBtaW5pbXVtVGltZShpbnQgYXZhaWxhYmxlTWVtb3J5LCB2ZWN0b3I8aW50PiB0YXNrTWVtcywgdmVjdG9yPGludD4gdGFza1R5cGVzKSB7CglpbnQgbiA9IHRhc2tNZW1zLnNpemUoKTsKCWludCBhbnMgPSAwLCBpLCBqOwoJdW5vcmRlcmVkX21hcDxpbnQsIHZlY3RvcjxpbnQ+PiB0YXNrc09mVHlwZTsKCXVub3JkZXJlZF9tYXA8aW50LCB2ZWN0b3I8aW50Pj46Oml0ZXJhdG9yIGl0OwoJCglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewoJCXRhc2tzT2ZUeXBlW3Rhc2tUeXBlc1tpXV0ucHVzaF9iYWNrKHRhc2tNZW1zW2ldKTsKCX0KCQoJZm9yIChpdCA9IHRhc2tzT2ZUeXBlLmJlZ2luKCk7IGl0ICE9IHRhc2tzT2ZUeXBlLmVuZCgpOyBpdCsrKSB7CgkJY2hlY2tUeXBlKGl0LT5zZWNvbmQsIGFucywgYXZhaWxhYmxlTWVtb3J5KTsKCX0KCQoJcmV0dXJuIGFuczsKfQoKaW50IG1haW4oKSB7Cgl2ZWN0b3I8aW50PiB0YXNrX21lbW9yeSA9IHsyLCAzLCA0LCAyLCAzfTsKCXZlY3RvcjxpbnQ+IHRhc2tfdHlwZSA9IHsxLCAyLCAxLCAxLCAyfTsKCWludCBtYXhfbWVtb3J5ID0gNTsKCWNvdXQgPDwgbWluaW11bVRpbWUobWF4X21lbW9yeSwgdGFza19tZW1vcnksIHRhc2tfdHlwZSk7CglyZXR1cm4gMDsKfQ==