2
public int[] countRectangles(int[][] rectangles, int[][] points) {3
int max = Integer.MIN_VALUE;5
TreeMap<Integer, List<Integer>> rects = new TreeMap<>();6
for (int[] rect : rectangles) {7
if (!rects.containsKey(rect[1])) {8
rects.put(rect[1], new ArrayList<Integer>());11
rects.get(rect[1]).add(rect[0]);12
max = Math.max(max, rect[1]);15
for (int k : rects.keySet()) {16
Collections.sort(rects.get(k));19
int[] ans = new int[points.length];20
for (int i = 0; i < points.length; i++) {21
if (points[i][1] > max) {27
for (int key : rects.subMap(points[i][1], max + 1).keySet()) {28
List<Integer> y = rects.get(key);30
count += binarySearch(y, points[i][0]);39
private int binarySearch(List<Integer> vals, int val) {41
int hi = vals.size() - 1;45
int mid = lo + (hi - lo) / 2;47
if (vals.get(mid) < val) {59
return vals.size() - id;