区间分组

# 题意
N个闭区间[ai,bi],请你将这些区间分成若干组,使得每组内部的区间两两之间(包括端点)没有交集,求最小的组数

# 题解
1.将所有区间按照左端点从小到大排序
2.从前往后处理每个区间,判断能否将其放到某个现有的组中
1.不存在这样的组开一个新的组,放入
2.存在这样的组随便挑一个将其放进去,并更新当前组的maxr

将所有分组的右端点加入小根队,每扫描一个区间的左端点,如果可以和当前右端点最小的组合并则将合并后的右端点入堆

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e5+10;
 4 struct a{
 5     int l,r;
 6     bool operator <(const a &b)const{
 7         return l<b.l;
 8     }
 9 }e[N];
10 priority_queue<int,vector<int>,greater<int>>res;
11 int main(){
12     int n;
13     scanf("%d",&n);
14     for(int i=0;i<n;i++)
15         scanf("%d%d",&e[i].l,&e[i].r);
16     sort(e,e+n);
17     for(int i=0;i<n;i++){
18         if(res.empty()||res.top()>=e[i].l) res.push(e[i].r);
19         else{
20             res.pop();
21             res.push(e[i].r);
22         }
23     }
24     printf("%d\n",res.size());
25 }

猜你喜欢

转载自www.cnblogs.com/hhyx/p/12543590.html