洛谷P2434 [SDOI2005]区间
这个题第一眼以为是一道区间合并(但其实就是区间合并),如果用区间合并的话只要输出合并不了的区间就行了。这个题不用区间合并也行,比方说贪心,那么贪心策略是什么呢?这时区间合并就提供给我们思路了,因此我们先排序左端点,比较右端点和下一个左端点的大小,如果合并不了就输出,继续判断下一组,这就是我们的贪心策略。
其实这个题本质还是结构体排序,因此对新学结构体的人来说是一道很好地练习题。
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int n; struct A { int l,r; }a[50050]; bool cmp(A x,A y) { return x.l<y.l; } int main() { int i,j; cin>>n; for(int i=1;i<=n;i++) cin>>a[i].l>>a[i].r; sort(a+1,a+1+n,cmp); int ansl=a[1].l,ansr=a[1].r; for(int i=2;i<=n;i++) { if(a[i].l<=ansr) ansr=max(ansr,a[i].r); else { cout<<ansl<<" "<<ansr<<endl; ansl=a[i].l; ansr=a[i].r; } } cout<<ansl<<" "<<ansr<<endl; return 0; }