将区间按左位置排序,然后统计
还有一种方法就是先把坐标离散话,然后再按照之前的方法处理,这个你可以自己差资料
[ 本帖最后由 czz5242199 于 2011-12-28 15:09 编辑 ]
#include <stdio.h> #include <stdlib.h> struct Node { int start; int end; }; int cmp(const void *pa,const void *pb) { return ((Node *)pa)->start - ((Node *)pb)->start; } Node list[105]; int main() { int l,m; int i,j,k; while(EOF != scanf("%d%d",&l,&m)) { for(i = 0;i<m;i++) scanf("%d%d",&list[i].start,&list[i].end); qsort(list,m,8,cmp); int max = list[0].end; int lost = list[0].start; for(i = 1;i<m;i++) { if(list[i].start > max) { lost += list[i].start-max-1; max = list[i].end; } else if(list[i].end > max) max = list[i].end; } printf("%d\n",lost+l-max); } return 0; }