知识点:二分,离散化,尺取法
这个题还是有点难度的,首先这里练习的是二分,然后看到数据范围需要用到离散化,然后判定函数里面需要用到尺取法,但是我这个判定函数的复杂度说实话有点高了,看洛谷的题解说可以二维双指针,想了想,确实应该是可以的,但是还没有试,明天起来试一试
这里有个需要注意的地方,尺取法枚举区间的时候可以枚举只有一个点的区间,也就是左端点和右端点重合的区间,这个题的数据可能出现那种点都聚集在一个地方的情况,所以写for循环的时候注意第二层循环的起点是i不是i+1,这是判定函数里面我一开始出现的错误
#include <bits/stdc++.h>
using namespace std;
const int N = 505;
int m, n, cnt1, cnt2, b[N], c[N], d[N][N];
pair<int, int> a[N];
bool cmp(pair<int, int> a, pair<int, int> b) {
return a.second < b.second;
}
bool check(int len) {
for (int i = 1; i <= cnt1; i++) {
for (int j = i; j <= cnt1; j++) {
if (b[j] - b[i] >= len) break;
int l = 1, r = 1;
int sum = 0;
int Min = 1e9;
while (true) {
while (r <= cnt2 && sum &