#include <functional>
#include <iostream>
#include <map>
#include <vector>
using namespace std;
class entity{
static const char* colorArray[];
size_t _index;
int _time;
public:
entity(int time) : _index(0U), _time(time) {}
void AddRed() {_index |= 4U;}
void AddYellow() {_index |= 2U;}
void AddBlue() {_index |= 1U;}
auto GetInitializedTime() const {return _time;}
auto Result() const {return colorArray[_index];}
};
const char* entity::colorArray[] = {"black", "blue", "yellow", "green", "red", "purple", "orange", "white"};
int main() {
map<int, function<void(entity&)>> events = {{3, mem_fn(&entity::AddRed)}, {9, mem_fn(&entity::AddBlue)}, {11, mem_fn(&entity::AddYellow)}};
vector<entity> Entity = {entity(1), entity(8), entity(13)};
for(auto& i : Entity) {
for(auto j = events.upper_bound(i.GetInitializedTime()); j != events.end(); ++j) {
j->second(i);
}
cout << i.Result() << endl;
}
return 0;
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHZlY3Rvcj4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBlbnRpdHl7CglzdGF0aWMgY29uc3QgY2hhciogY29sb3JBcnJheVtdOwoJc2l6ZV90IF9pbmRleDsKCWludCBfdGltZTsKcHVibGljOgoJZW50aXR5KGludCB0aW1lKSA6IF9pbmRleCgwVSksIF90aW1lKHRpbWUpIHt9Cgl2b2lkIEFkZFJlZCgpIHtfaW5kZXggfD0gNFU7fQoJdm9pZCBBZGRZZWxsb3coKSB7X2luZGV4IHw9IDJVO30KCXZvaWQgQWRkQmx1ZSgpIHtfaW5kZXggfD0gMVU7fQoJYXV0byBHZXRJbml0aWFsaXplZFRpbWUoKSBjb25zdCB7cmV0dXJuIF90aW1lO30KCWF1dG8gUmVzdWx0KCkgY29uc3Qge3JldHVybiBjb2xvckFycmF5W19pbmRleF07fQp9OwoKY29uc3QgY2hhciogZW50aXR5Ojpjb2xvckFycmF5W10gPSB7ImJsYWNrIiwgImJsdWUiLCAieWVsbG93IiwgImdyZWVuIiwgInJlZCIsICJwdXJwbGUiLCAib3JhbmdlIiwgIndoaXRlIn07CgppbnQgbWFpbigpIHsKCW1hcDxpbnQsIGZ1bmN0aW9uPHZvaWQoZW50aXR5Jik+PiBldmVudHMgPSB7ezMsIG1lbV9mbigmZW50aXR5OjpBZGRSZWQpfSwgezksIG1lbV9mbigmZW50aXR5OjpBZGRCbHVlKX0sIHsxMSwgbWVtX2ZuKCZlbnRpdHk6OkFkZFllbGxvdyl9fTsKCXZlY3RvcjxlbnRpdHk+IEVudGl0eSA9IHtlbnRpdHkoMSksIGVudGl0eSg4KSwgZW50aXR5KDEzKX07CgkKCWZvcihhdXRvJiBpIDogRW50aXR5KSB7CgkJZm9yKGF1dG8gaiA9IGV2ZW50cy51cHBlcl9ib3VuZChpLkdldEluaXRpYWxpemVkVGltZSgpKTsgaiAhPSBldmVudHMuZW5kKCk7ICsraikgewoJCQlqLT5zZWNvbmQoaSk7CgkJfQoJCWNvdXQgPDwgaS5SZXN1bHQoKSA8PCBlbmRsOwoJfQoJCglyZXR1cm4gMDsKfQ==