#include <iostream>
int upperBound(int* array, int fromIndex, int toIndex, int key) {
int low = fromIndex-1, high = toIndex;
while (low+1 != high)
{
int mid = (low+high) >> 1;
if (array[mid]> key) high=mid;
else low=mid;
}
int p = low;
if ( p >= toIndex || array[p] != key )
p=-1;//no key found
return p;
}
int main() {
int arr[2] = {2, 3};
std::cout << upperBound(arr, 0, 1, 3) << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKaW50IHVwcGVyQm91bmQoaW50KiBhcnJheSwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgsIGludCBrZXkpIHsKICAgIGludCBsb3cgPSBmcm9tSW5kZXgtMSwgaGlnaCA9IHRvSW5kZXg7CiAgICB3aGlsZSAobG93KzEgIT0gaGlnaCkKICAgIHsKICAgICAgICBpbnQgbWlkID0gKGxvdytoaWdoKSA+PiAxOwogICAgICAgIGlmIChhcnJheVttaWRdPiBrZXkpIGhpZ2g9bWlkOwogICAgICAgIGVsc2UgbG93PW1pZDsKICAgIH0KICAgIGludCBwID0gbG93OwogICAgaWYgKCBwID49IHRvSW5kZXggfHwgYXJyYXlbcF0gIT0ga2V5ICkKICAgICAgICBwPS0xOy8vbm8ga2V5IGZvdW5kCiAgICByZXR1cm4gcDsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgYXJyWzJdID0gezIsIDN9OwogICAgc3RkOjpjb3V0IDw8IHVwcGVyQm91bmQoYXJyLCAwLCAxLCAzKSA8PCBzdGQ6OmVuZGw7CiAgICByZXR1cm4gMDsKfQ==