题目链接:区间交集

分析:

贪心

将每个区间按左端点从小到大排序,同时用小根堆来维护区间右端点

对于若干区间的交集的长度为这些区间的右端点的最小值 - 这些区间的左端点的最大值

代码实现
#include <bits/extc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using namespace std;
using P = pair<int, int>;
inline void chmax(int& x, int y) { if (x < y) x = y; }
int main() {
int n, k;
cin >> n >> k;
vector<P> p;
rep(i, n) {
int a, b;
cin >> a >> b;
p.emplace_back(a, b);
}
sort(p.begin(), p.end());
priority_queue<int, vector<int>, greater<int>> q;
rep(i, k) q.push(p[i].second);
int ans = q.top() - p[k-1].first;
for (int i = k; i < n; ++i) {
q.push(p[i].second); q.pop();
chmax(ans, q.top() - p[i].first);
}
cout << ans << '\n';
return 0;
}