1function compress(coords) {
2 const sorted = [...new Set(coords)].sort((a, b) => a - b);
3 return coords.map((v) => lowerBound(sorted, v));
4}
5function lowerBound(arr, target) {
6 let lo = 0, hi = arr.length;
7 while (lo < hi) {
8 const mid = (lo + hi) >> 1;
9 if (arr[mid] < target) lo = mid + 1;
10 else hi = mid;
11 }
12 return lo;
13}