其他分享
首页 > 其他分享> > 区间交集

区间交集

作者:互联网

题目链接:区间交集

分析:

贪心

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

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

代码实现
#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;
}

标签:交集,rep,cin,int,端点,区间
来源: https://www.cnblogs.com/Melville/p/16687044.html