2023-9-23 区间分组

题目链接:区间分组

2023-9-23 区间分组_第1张图片

#include 
#include 
#include 

using namespace std;

const int N = 100010;

struct Range
{
    int l, r;
    bool operator< (const Range &W) const 
    {
        return l < W.l;
    }
}range[N];

int main()
{
    int n;
    cin >> n;
    for(int i = 0; i < n; i ++)
    {
        int l, r;
        cin >> l >> r;
        range[i] = {l, r};
    }
    
    sort(range, range + n);
    
    // 用小根堆来维护所有组的右端点的最大值
    priority_queue, greater> heap;
    
    for(int i = 0; i < n; i ++)
    {
        auto r = range[i];
        // 如果两个区间之间有交集,则为该组创建一个新组
        if(heap.empty() || heap.top() >= r.l) heap.push(r.r);
        else
        {
            heap.pop();
            heap.push(r.r);
        }
    }
    
    cout << heap.size() << endl;
    
    return 0;
}

你可能感兴趣的:(贪心算法)