洛谷 1803 凌乱的yyy

【题意概述】

  给出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\n",ans);
27     return 0;
28 }
View Code

 

posted @ 2018-04-18 20:59  Driver_Lao  阅读(243)  评论(0编辑  收藏  举报