标签:
Description
Input
Output
Sample Input
3 10
1 7
3 6
6 10
Sample Output
2
Hint
#include<iostream> #include<stdio.h> #include<algorithm> using namespace std; struct node{ int x,y; }e[25005]; bool cmp(node a,node b){ if(a.x==b.x)return a.y>b.y; return a.x<b.x; } int main(){ int n,m,i,j; cin>>n>>m; for(i=1;i<=n;i++){ scanf("%d%d",&e[i].x,&e[i].y); } sort(e+1,e+1+n,cmp);//排序 e[n+1].x=9999999; int ans=0,t=0,temp=0,f=0;//ans代表数量,t代表当前线段的最右端,temp代表t-i中右端最远的线段标号,f代表当前有没有线段可用 for(i=1;i<=n;i++){ if(t+1>=e[i].x){//如果当前线段的右端+1到达了当前线段的左端右边,那么 if(temp<e[i].y){//寻找最右端的线段 temp=e[i].y; f=1; } if(e[i+1].x>t+1&&f){//如果下一条线段的开始点已经大于当前线段的结束点+1,那么就把前面右端最远的线段用掉 ans++; f=0; t=temp; } } } if(t<m)cout<<"-1"<<endl; else cout<<ans<<endl; return 0; }
标签:
原文地址:http://blog.csdn.net/black_miracle/article/details/51354371