数轴上定长区间与给定区间同时相交的最大数量
模型
在[1, n]中给定k个长度不等区间[l, r],求[1, n]中长度为d的区间与给定区间同时相交的最大数量
解法一 排序 + 滑动窗口
int solve(int n, int d, int k, std::vector<PII> &a) {
std::sort(a.begin(), a.end());
std::priority_queue<int, std::vector<int>, std::greater<int>> f;
int max = 0, idx = 0;
for (int i = 1, j = 1; i <= n; i++) {
while (idx < k && a[idx].first == i) {
f.push(a[idx].second);
idx++;
}
while (i - j + 1 > d)
j++;
while (f.size() && f.top() < j)
f.pop();
max = std::max(max, (int)f.size());
}
return max;
}
解法二 相交 = 总数 - 不相交
int solve() {
int n, d, k;
std::cin >> n >> d >> k;
std::vector<int> l(n + 2, 0), r(n + 2, 0);
for (int i = 1; i <= k; i++) {
int a, b;
std::cin >> a >> b;
l[a]++;
r[b]++;
}
for (int i = 1; i <= n; i++) {
r[i] += r[i - 1];
}
for (int i = n; i >= 1; i--) {
l[i] += l[i + 1];
}
int mx = -1;
for (int i = 1, j = i + d - 1; j <= n; i++, j++)
mx = std::max(l[j + 1] + r[i - 1], mx);
return mx;
}

浙公网安备 33010602011771号