function
bisect_left(arr, target) {
let left = 0;
let right = arr.length;
while
(left < right) {
const mid = Math.floor((left + right) / 2);
if
(arr[mid] < target) {
left = mid + 1;
}
else
{
right = mid;
}
}
return
left;
}
function
findMinMax(W, H, cor, N, A, B, X, Y) {
const HashMap = {};
const arr1 =
new
Array(X + 2).fill(0);
const arr2 =
new
Array(Y + 2).fill(0);
for
(let i = 0; i < X; i++) {
arr1[i + 1] = A[i];
}
arr1[X + 1] = W;
for
(let i = 0; i < Y; i++) {
arr2[i + 1] = B[i];
}
arr2[Y + 1] = H;
for
(let i = 0; i < N; i++) {
const ind1 = bisect_left(arr1, cor[i][0]);
const ind2 = bisect_left(arr2, cor[i][1]);
const key = [arr1[ind1 - 1], arr1[ind1], arr2[ind2 - 1], arr2[ind2]].toString();
HashMap[key] = (HashMap[key] || 0) + 1;
}
let minAns = Infinity;
let maxAns = -Infinity;
for
(const e
in
HashMap) {
const count = HashMap[e];
minAns = Math.min(count, minAns);
maxAns = Math.max(count, maxAns);
}
if
(Object.keys(HashMap).length === (X + 1) * (Y + 1)) {
console.log(
"Minimum number of coordinates:"
, minAns,
"Maximum number of coordinates:"
, maxAns);
}
else
{
console.log(
"Minimum number of coordinates:"
, 0,
"Maximum number of coordinates:"
, maxAns);
}
}
const W = 7;
const H = 6;
const cor = [[6, 1], [3, 1], [4, 2], [1, 5], [6, 2]];
const N = 5;
const A = [2, 5];
const B = [3, 4];
const X = 2;
const Y = 2;
findMinMax(W, H, cor, N, A, B, X, Y);
const W1 = 4;
const H1 = 4;
const cor1 = [[1, 1], [3, 1], [3, 3], [1, 3]];
const N1 = 4;
const A1 = [2];
const B1 = [2];
const X1 = 1;
const Y1 = 1;
findMinMax(W1, H1, cor1, N1, A1, B1, X1, Y1);