输入
第1行:1个数N,线段的数量(2 <= N <= 10000) 第2 - N + 1行:每行2个数,线段的起点和终点(-10^9 <= S,E <= 10^9)
输出
输出最多可以选择的线段数量。
输入示例
3 1 5 2 3 3 6
输出示例
2
代码如下
参考紫书 P232 选择不相交区间
#include<cstdio> #include<algorithm> #include<string.h> #include<ctype.h> using namespace std; typedef struct rmm{int a,b;} r; int cmp(r x,r y){ if(x.b==y.b) return x.a<y.a; return x.b<y.b; } int main() { int n; r rs[10009]; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d%d",&rs[i].a,&rs[i].b); sort(rs,rs+n,cmp); int sel=0,s=1; for(int i=0;i<n-1;i++){ // printf("%d %d\n",rs[i].a,rs[i].b); if(rs[i+1].a>=rs[sel].b){ sel =i+1; s++;} } printf("%d",s); }