不重叠的线段 51nod

链接

[http://www.51nod.com/onlineJudge/questionCode.html#problemId=1133&noticeId=468024]

题意

X轴上有N条线段,每条线段有1个起点S和终点E。最多能够选出多少条互不重叠的线段。(注:起点或终点重叠,不算重叠)。
例如:[1 5][2 3][3 6],可以选[2 3][3 6],这2条线段互不重叠。

分析

只需对左端点排序,再贪心,用一个东西标记上一个段的右端点,那么下一个不重叠的段左端点应该大于等于那个标记

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
typedef pair<ll,ll> pa;
pair<ll,ll> p[100010];
bool cmp(pa p1,pa p2){
	return p1.second<p2.second;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	//freopen("in.txt","r",stdin);
	ll n,i;
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>p[i].first>>p[i].second;
	}
	sort(p,p+n,cmp);
	ll tem=-(1<<30); ll sum=0;
	for(i=0;i<n;i++){
		if(p[i].first>=tem){
			sum++;
			tem=p[i].second;
		}
	}
	cout<<sum<<endl;
	return 0;
}
posted @ 2018-10-17 11:09  ChunhaoMo  阅读(283)  评论(0)    收藏  举报