#include <iostream>
using namespace std;
int lowerBound(int arr[], int n, int key){
int low = 0;
int high = n;
while(low < high){
int mid =(low + high) / 2;
if(arr[mid] < key){
low = mid + 1;
}
else{
high = mid;
}
return low;
}
}
int upperBound(int arr[], int n, int key){
int low = 0;
int high = n;
while(low < high){
int mid = (low + high) / 2;
if(arr[mid] <= key){
low = mid + 1;
}
else{
high = mid;
}
return low;
}
}
int main(){
int arr[] = {1, 3, 3, 3, 4};
cout << lowerBound(arr, 5, 4) << endl << upperBound(arr, 5, 4);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBsb3dlckJvdW5kKGludCBhcnJbXSwgaW50IG4sIGludCBrZXkpewogICAgaW50IGxvdyA9IDA7CiAgICBpbnQgaGlnaCA9IG47CiAgICB3aGlsZShsb3cgPCBoaWdoKXsKICAgICAgICBpbnQgbWlkID0obG93ICsgaGlnaCkgLyAyOwogICAgICAgIGlmKGFyclttaWRdIDwga2V5KXsKICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgaGlnaCA9IG1pZDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxvdzsKICAgIH0KfQoKCmludCB1cHBlckJvdW5kKGludCBhcnJbXSwgaW50IG4sIGludCBrZXkpewogICAgaW50IGxvdyA9IDA7CiAgICBpbnQgaGlnaCA9IG47CiAgICB3aGlsZShsb3cgPCBoaWdoKXsKICAgICAgICBpbnQgbWlkID0gKGxvdyArIGhpZ2gpIC8gMjsKICAgICAgICBpZihhcnJbbWlkXSA8PSBrZXkpewogICAgICAgICAgICBsb3cgPSBtaWQgKyAxOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBoaWdoID0gbWlkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbG93OwogICAgfQp9CgoKaW50IG1haW4oKXsKICAgIGludCBhcnJbXSA9IHsxLCAzLCAzLCAzLCA0fTsKICAgIGNvdXQgPDwgIGxvd2VyQm91bmQoYXJyLCA1LCA0KSA8PCBlbmRsIDw8IHVwcGVyQm91bmQoYXJyLCA1LCA0KTsKCiAgICByZXR1cm4gMDsKfQo=