#include <vector>
#include <utility>
#include <algorithm>
#include <iostream>
template<class Iter, class T>
Iter binary_find(Iter begin, Iter end, T val)
{
// Finds the lower bound in at most log(last - first) + 1 comparisons
Iter i = std::lower_bound(begin, end, val);
if (i != end && *i == val)
return i; // found
else
return end; // not found
}
int main()
{
std::vector< std::pair<int, int> > vec = { { 1, 2 }, { 2, 2 }, { 3, 4 }, { 4, 6 } };
auto elem = binary_find(vec.begin(), vec.end(), std::make_pair(2, 2));
std::cout << (elem != vec.end()) << std::endl;
return 0;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnRlbXBsYXRlPGNsYXNzIEl0ZXIsIGNsYXNzIFQ+Ckl0ZXIgYmluYXJ5X2ZpbmQoSXRlciBiZWdpbiwgSXRlciBlbmQsIFQgdmFsKQp7CiAgICAvLyBGaW5kcyB0aGUgbG93ZXIgYm91bmQgaW4gYXQgbW9zdCBsb2cobGFzdCAtIGZpcnN0KSArIDEgY29tcGFyaXNvbnMKICAgIEl0ZXIgaSA9IHN0ZDo6bG93ZXJfYm91bmQoYmVnaW4sIGVuZCwgdmFsKTsKCiAgICBpZiAoaSAhPSBlbmQgJiYgKmkgPT0gdmFsKQogICAgICAgIHJldHVybiBpOyAvLyBmb3VuZAogICAgZWxzZQogICAgICAgIHJldHVybiBlbmQ7IC8vIG5vdCBmb3VuZAp9CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6dmVjdG9yPCBzdGQ6OnBhaXI8aW50LCBpbnQ+ID4gdmVjID0geyB7IDEsIDIgfSwgeyAyLCAyIH0sIHsgMywgNCB9LCB7IDQsIDYgfSB9OwogICAgYXV0byBlbGVtID0gYmluYXJ5X2ZpbmQodmVjLmJlZ2luKCksIHZlYy5lbmQoKSwgc3RkOjptYWtlX3BhaXIoMiwgMikpOwogICAgc3RkOjpjb3V0IDw8IChlbGVtICE9IHZlYy5lbmQoKSkgPDwgc3RkOjplbmRsOwoKICAgIHJldHVybiAwOwp9