diff --git a/P2862.cpp b/P2862.cpp new file mode 100644 index 0000000..b0a3907 --- /dev/null +++ b/P2862.cpp @@ -0,0 +1,74 @@ +#include +using namespace std; + +int c, n; +pair cc[505]; +int tmpx[505], tmpy[505]; +int sum[505][505]; +int totx, toty; +bool check(int len) +{ + for (int i = 1; i <= totx; ++i) + { + int j = i; + while (j <= totx && tmpx[j] - tmpx[i] <= len - 1) + j++; + j--; + int l = 1; + for (int k = 1; k <= toty; ++k) + { + if (l < k) + l = k; + while (l <= toty && tmpy[l] - tmpy[k] <= len - 1) + l++; + l--; + if (l >= k) + { + int cnt = sum[j][l] - sum[i - 1][l] - sum[j][k - 1] + sum[i - 1][k - 1]; + if (cnt >= c) + return 1; + } + } + } + return 0; +} + +int main() +{ + scanf("%d%d", &c, &n); + for (int i = 1; i <= n; ++i) + { + scanf("%d%d", &cc[i].first, &cc[i].second); + tmpx[i] = cc[i].first, tmpy[i] = cc[i].second; + } + sort(tmpx + 1, tmpx + n + 1); + totx = unique(tmpx + 1, tmpx + n + 1) - (tmpx + 1); + sort(tmpy + 1, tmpy + n + 1); + toty = unique(tmpy + 1, tmpy + n + 1) - (tmpy + 1); + memset(sum, 0, sizeof(sum)); + for (int i = 1; i <= n; ++i) + { + int x = lower_bound(tmpx + 1, tmpx + totx + 1, cc[i].first) - tmpx; + int y = lower_bound(tmpy + 1, tmpy + toty + 1, cc[i].second) - tmpy; + sum[x][y]++; + } + for (int i = 1; i <= totx; ++i) + { + for (int j = 1; j <= toty; ++j) + { + sum[i][j] += sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1]; + } + } + int L = 1, R = max(tmpx[totx] - tmpx[1] + 1, tmpy[toty] - tmpy[1] + 1), ans; + while (L <= R) + { + int mid = (L + R) / 2; + if (check(mid)) + ans = mid, R = mid - 1; + else + L = mid + 1; + } + + printf("%d\n", ans); + return 0; +} \ No newline at end of file