题目
找到一个含元素个数最少的集合,使得对于每一个区间,都至少有一个整数属于该集合,输出该集合的元素个数。
输入
首行包括区间的数目n,1≤n≤10000,接下来的n行,每行包括两个整数a,b,被一空格隔开,0≤a≤b≤10000,它们是某一个区间的开始值和结束值。
输出
第一行集合元素的个数,对于每一个区间都至少有一个整数属于该区间,且集合所包含元素数目最少。
样例输入
4
3 6
2 4
0 2
4 7
样例输出
2
还是有关区间的问题,和上一个时间区间异曲同工,就不细说了
#include<iostream>
#include<algorithm>
using namespace std;struct s{int begin;int end;
};
int sql(s &a, s &b){return a.end<b.end;
}int main(){int n;cin>>n;s a[1001];for(int i=1;i<=n;++i){cin>>a[i].begin>>a[i].end;}sort(a+1,a+n+1,sql);int num=0,begin=a[1].end;int b[1001],k=0;b[k]=a[1].end;for(int i=2;i<=n;++i){//下一个区间的头大于上一个,//就把他的尾部存起来,并用下下一个区间的头与之比较if(a[i].begin>begin){num++;k++;b[k]=a[i].end;begin=a[i].end;}} cout<<num+1<<endl;for(int i=0;i<=k;++i){cout<<b[i]<<' ';}return 0;
}