public int[] maximumBeauty(int[][] items, int[] queryies) {
    int n = items.length;
    Arrays.sort(items,(a,b)->{
        return a[0] - b[0];});
    int[] maxArray = new int[n];
    int max  = 0;
    for (int i = 0; i < n; i++) {
        max = Math.max(items[i][1], max);
        maxArray[i] = max;
    }

    int length = queryies.length;
    int[] ans = new int[length];
    for (int i = 0; i < length; i++) {
        int j = binarySearchLeft(items, queryies[i]);
        ans[i] = j < 0 ? 0 : maxArray[j];
    }
    return ans;
}

private int binarySearchLeft(int[][] items, int target) {
    int r = items.length -1;
    int l = 0;
    while (l <= r) {
        int mid = (r - l) / 2 + l;
        if (items[mid][0] > target) {
            r = mid - 1;
        } else {
            l = mid + 1;
        }
    }
    return l -1;
}