#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
unsigned short INVALID = 0x7FFF;
struct less
{
bool operator() (std::map<int, unsigned short>::value_type const& a, std::map<int, unsigned short>::value_type const& b)
{
if (a.second == INVALID || b.second == INVALID)
return false;
return a.second < b.second;
}
};
int main()
{
std::map<int, unsigned short> a;
a[1] = INVALID;
a[2] = 1;
a[3] = 2;
a[4] = 3;
std::cout << "A max = " << std::max_element(a.begin(), a.end(), less())->second << std::endl;
std::cout << "A min = " << std::min_element(a.begin(), a.end(), less())->second<< std::endl;
std::map<int, unsigned short> b;
b[1] = 1;
b[2] = 2;
b[3] = 3;
b[4] = INVALID;
std::cout << "B max = " << std::max_element(b.begin(), b.end(), less())->second << std::endl;
std::cout << "B min = " << std::min_element(b.begin(), b.end(), less())->second << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgoKdW5zaWduZWQgc2hvcnQgSU5WQUxJRCA9IDB4N0ZGRjsKCnN0cnVjdCBsZXNzCnsKICAgIGJvb2wgb3BlcmF0b3IoKSAoc3RkOjptYXA8aW50LCB1bnNpZ25lZCBzaG9ydD46OnZhbHVlX3R5cGUgY29uc3QmIGEsIHN0ZDo6bWFwPGludCwgdW5zaWduZWQgc2hvcnQ+Ojp2YWx1ZV90eXBlIGNvbnN0JiBiKQogICAgewogICAgICAgIGlmIChhLnNlY29uZCA9PSBJTlZBTElEIHx8IGIuc2Vjb25kID09IElOVkFMSUQpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gYS5zZWNvbmQgPCBiLnNlY29uZDsKICAgIH0KfTsKCmludCBtYWluKCkKewogICAgc3RkOjptYXA8aW50LCB1bnNpZ25lZCBzaG9ydD4gYTsKICAgIGFbMV0gPSBJTlZBTElEOwogICAgYVsyXSA9IDE7CiAgICBhWzNdID0gMjsKICAgIGFbNF0gPSAzOwoJc3RkOjpjb3V0IDw8ICJBIG1heCA9ICIgPDwgc3RkOjptYXhfZWxlbWVudChhLmJlZ2luKCksIGEuZW5kKCksIGxlc3MoKSktPnNlY29uZCA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgIkEgbWluID0gIiA8PCBzdGQ6Om1pbl9lbGVtZW50KGEuYmVnaW4oKSwgYS5lbmQoKSwgbGVzcygpKS0+c2Vjb25kPDwgc3RkOjplbmRsOwoJCglzdGQ6Om1hcDxpbnQsIHVuc2lnbmVkIHNob3J0PiBiOwogICAgYlsxXSA9IDE7CiAgICBiWzJdID0gMjsKICAgIGJbM10gPSAzOwogICAgYls0XSA9IElOVkFMSUQ7CglzdGQ6OmNvdXQgPDwgIkIgbWF4ID0gIiA8PCBzdGQ6Om1heF9lbGVtZW50KGIuYmVnaW4oKSwgYi5lbmQoKSwgbGVzcygpKS0+c2Vjb25kIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCAiQiBtaW4gPSAiIDw8IHN0ZDo6bWluX2VsZW1lbnQoYi5iZWdpbigpLCBiLmVuZCgpLCBsZXNzKCkpLT5zZWNvbmQgPDwgc3RkOjplbmRsOwoJCgkKICAgIHJldHVybiAwOwp9Cg==