#include <map>
#include <algorithm>
#include <stdio.h>

int main(int,char**)
{
    typedef std::map<int,uint32_t> map_t;
    map_t m;
    for (int i=0 ; i<16 ; i++)
        m[i]= i;
    for (int i=16 ; i<20 ; i++)
        m[i]= 0xFFFFFFFF;

    auto iu= std::upper_bound(m.begin(), m.end(), map_t::value_type(0,0xFFFFFFFF),
            [](const map_t::value_type&lhs, const map_t::value_type&rhs)->bool { return lhs.second<rhs.second; });
    auto il= std::lower_bound(m.begin(), m.end(), map_t::value_type(0,0xFFFFFFFF),
            [](const map_t::value_type&lhs, const map_t::value_type&rhs)->bool { return lhs.second<rhs.second; });

    printf("%d %d\n", 
            iu==m.end() ? -1 : iu->first,
            il==m.end() ? -1 : il->first);
    return 0;
}
