【题意概述】
给出100W个区间,要求找出尽量多的区间满足它们互补重叠,输出最大的区间数。
【题解】
贪心。
对区间按照右端点从小到大排序,然后逐个加入合法区间即可。
1 #include<cstdio> 2 #include<algorithm> 3 #define rg register 4 #define N 1000010 5 using namespace std; 6 int n,ans; 7 struct rec{ 8 int l,r; 9 }s[N]; 10 inline int read(){ 11 int k=0; char c=getchar(); 12 while(c<'0'||c>'9')c=getchar(); 13 while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar(); 14 return k; 15 } 16 inline bool cmp(rec a,rec b){return a.r<b.r;} 17 int main(){ 18 n=read(); 19 for(rg int i=1;i<=n;i++) s[i].l=read(),s[i].r=read(); 20 sort(s+1,s+1+n,cmp); int last=0; 21 for(rg int i=1;i<=n;i++){ 22 if(s[i].l>=last){ 23 ans++; last=s[i].r; 24 } 25 } 26 printf("%d ",ans); 27 return 0; 28 }