#include <iostream>
#include <vector>
#include <algorithm>
template <typename T>
class Masker {
private:
template <typename V>
struct Item {
bool mask;
V val;
};
std::vector<Item<T>> vec;
public:
Masker(std::vector<bool> mask, std::vector<T> vals) {
for(size_t i = 0; i < vals.size(); i++) {
vec.push_back({mask[i], vals[i]});
}
}
const T& find_min() {
return (*min_element(vec.begin(), vec.end(),
[](const auto& lhs, const auto& rhs){
if(!lhs.mask) { return false; }
if(!rhs.mask) { return true; }
return lhs.val < rhs.val;
})).val;
}
};
int main() {
std::vector<bool> mask = {0, 0, 1, 0, 1, 1, 0};
std::vector<double> vec = {7.1, 1.0, 3.2, 2.0, 1.8, 5.0, 0.0};
std::cout << Masker<double>(mask, vec).find_min();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIE1hc2tlciB7CnByaXZhdGU6Cgl0ZW1wbGF0ZSA8dHlwZW5hbWUgVj4KCXN0cnVjdCBJdGVtIHsKCQlib29sIG1hc2s7CgkJViB2YWw7Cgl9OwoJc3RkOjp2ZWN0b3I8SXRlbTxUPj4gdmVjOwpwdWJsaWM6CglNYXNrZXIoc3RkOjp2ZWN0b3I8Ym9vbD4gbWFzaywgc3RkOjp2ZWN0b3I8VD4gdmFscykgewoJCWZvcihzaXplX3QgaSA9IDA7IGkgPCB2YWxzLnNpemUoKTsgaSsrKSB7CgkJCXZlYy5wdXNoX2JhY2soe21hc2tbaV0sIHZhbHNbaV19KTsKCQl9Cgl9Cgljb25zdCBUJiBmaW5kX21pbigpIHsKCQlyZXR1cm4gKCptaW5fZWxlbWVudCh2ZWMuYmVnaW4oKSwgdmVjLmVuZCgpLAoJCQlbXShjb25zdCBhdXRvJiBsaHMsIGNvbnN0IGF1dG8mIHJocyl7IAoJCQkJaWYoIWxocy5tYXNrKSB7IHJldHVybiBmYWxzZTsgfQoJCQkJaWYoIXJocy5tYXNrKSB7IHJldHVybiB0cnVlOyB9CgkJCQlyZXR1cm4gbGhzLnZhbCA8IHJocy52YWw7CgkJCX0pKS52YWw7Cgl9Cn07CgppbnQgbWFpbigpIHsKCQoJc3RkOjp2ZWN0b3I8Ym9vbD4gbWFzayAgID0gezAsICAgMCwgICAxLCAgIDAsICAgMSwgICAxLCAgIDB9OwoJc3RkOjp2ZWN0b3I8ZG91YmxlPiB2ZWMgPSB7Ny4xLCAxLjAsIDMuMiwgMi4wLCAxLjgsIDUuMCwgMC4wfTsKCQoJc3RkOjpjb3V0IDw8IE1hc2tlcjxkb3VibGU+KG1hc2ssIHZlYykuZmluZF9taW4oKTsKCQoJcmV0dXJuIDA7Cn0=