struct point{
node a, b;
}p[N];
1、选择不相交区间
【例1】数轴上有n个开区间(ai,bi)。选择尽量多个区间,使得这些区间两两没有公共点。
【Solution】
bool cmp(point x, point y){
if(x.b!=y.b)
return x.a<y.a;
else
return x.b<y.b;
}
sort(p,p+n,cmp);
再一次选区间
2、区间选点问题
【例2】数轴上有n个闭区间[ai,bi]。取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)。
【Solution】排序方式:所有区间按b从小到大排序(b相同时a从大到小排序),选点时选未覆盖点的区间的右端点。
3、区间覆盖问题
【例3】数轴上有n个闭区间[ai,bi]。选择尽量少的区间覆盖一条指定线段[s,t]。
【Solution】首先进行预处理,在[s,t]外部的线段全部除去。各区间按a从小到大排序(a相同时b从大到小排序)
不断用已选择的区间右端点bi更新要覆盖线段的起点,知道已知线段被全部覆盖。