class Solution {
  public:
    int UpperBound(vector<int>& arr, int target) {
        // code here
        int low  = 0;
        
        int high = arr.size();
        
        
        while(low<high){
            int mid= (low+high)/2;
            
            if(arr[mid] >= target){
                high = mid;
            }else{
                low = mid+1;
            }
        }
        
        return high;
    }
};
class Solution {
  public:
    int lowerBound(vector<int>& arr, int target) {
        // code here
        int low  = 0;
        
        int high = arr.size();
        
        
        while(low<high){
            int mid= (low+high)/2;
            
            if(arr[mid] < target){
                low = mid+1;
            }else{
                high = mid;
            }
        }
        
        return low;
    }
};