#include <bits/stdc++.h>
using namespace std;
int upperBound(vector<int> &arr, int x, int n) {
int low = 0, high = n - 1;
int ans = n;
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] > x) {
ans = mid;
high = mid - 1;
}
else {
low = mid + 1;
}
}
return ans;
}
int main()
{
vector<int> arr = {3, 5, 8, 9, 15, 19};
int n = 6, x = 9;
int ind = upperBound(arr, x, n);
cout << "The upper bound is the index: " << ind << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgdXBwZXJCb3VuZCh2ZWN0b3I8aW50PiAmYXJyLCBpbnQgeCwgaW50IG4pIHsKICAgIGludCBsb3cgPSAwLCBoaWdoID0gbiAtIDE7CiAgICBpbnQgYW5zID0gbjsKCiAgICB3aGlsZSAobG93IDw9IGhpZ2gpIHsKICAgICAgICBpbnQgbWlkID0gKGxvdyArIGhpZ2gpIC8gMjsKICAgICAgICBpZiAoYXJyW21pZF0gPiB4KSB7CiAgICAgICAgICAgIGFucyA9IG1pZDsKICAgICAgICAgICAgaGlnaCA9IG1pZCAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBsb3cgPSBtaWQgKyAxOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBhbnM7Cn0KCmludCBtYWluKCkKewogICAgdmVjdG9yPGludD4gYXJyID0gezMsIDUsIDgsIDksIDE1LCAxOX07CiAgICBpbnQgbiA9IDYsIHggPSA5OwogICAgaW50IGluZCA9IHVwcGVyQm91bmQoYXJyLCB4LCBuKTsKICAgIGNvdXQgPDwgIlRoZSB1cHBlciBib3VuZCBpcyB0aGUgaW5kZXg6ICIgPDwgaW5kIDw8ICJcbiI7CiAgICByZXR1cm4gMDsKfQ==