Sort the given points using any nlogn sorting algo(quick sort or merge-sort). where the comparison function takes both x and y into account. Now, since we have sorted list/array, we can do a binary search on this sorted array to find the position of the input point. Now, we have the position in sorted array, all the points below this position is what we needed. If you are using array as your data-structure , due to one-off nature, the position is your answer.
Time complexity:-
Sorting takes n * log n
Binary search takes log n
Returning the position is 0(1).
Total = n * log n + log n + 1
When compared to n * logn, (log n + 1) is just a constant and this constant becomes relatively very small for a very large data-set. So, your overall complexity is still n * log n.
For example let us say the number of data point is 100. Then,
100 * log (100) = 200. (Taking base as 10).
log(100) + (100 * log(100)) = 202.
You see, the additional log(n) makes the time complexity from 200 to 202. Hence, for a really large dataset, you can safely ignore the addition of log(n) as just a constant.