区间合并

9.区间合并


区间合并

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20210518164809849.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MzAzNzM3OQ==,size_16,color_FFFFFF,t_70)

输入样例:

5
1 2
2 4
5 6
7 8
7 9

输出样例:

3

模板:

//区间合并
#include<iostream>
#include<cstdio>
#include<vector> 
#include<algorithm>
using namespace std;
const int N = 100010;
int n;
typedef pair<int,int>PII;
vector<PII> segs;
//双指针 
void merge(vector<PII> &segs){
	vector<PII> res;
	sort(segs.begin(),segs.end());  //C++默认先以 first 排序再以 second 排序 
	int st=-2e9,ed=-2e9;
	for(auto seg : segs)
	    if(ed<seg.first){
	    	if(st!=-2e9) res.push_back({st,ed});
			st=seg.first,ed=seg.second; 
		}
		else ed=max(ed,seg.second);
	if(st!=-2e9) res.push_back({st,ed});
	
	segs=res; 
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		int l,r;
		cin>>l>>r;
		segs.push_back({l,r}); 
	}
	merge(segs);
	cout<<segs.size()<<endl;
	return 0;
}

 

posted @ 2022-03-22 00:50  panse·  阅读(11)  评论(0)    收藏  举报