思路:

脑抽了,一看题目,这不就是线段树么,离散化区间合并。。最终发现我并不会写。。。于是看了下题目范围10^6。。。模拟水之。。每个区间左端点+1,右端点-1,从左到右扫一下就行了。。。

 

代码:

 1 /*
 2     ID:xu baoqi
 3     LANG:C++
 4     TASK:milk2
 5 */
 6 
 7 #include <cstdio>
 8 #include <cstring>
 9 #include <algorithm>
10 #include <iostream>
11 #include <vector>
12 #include <queue>
13 #include <cmath>
14 #include <set>
15 using namespace std;
16 
17 #define N 1000005
18 
19 
20 int a[N];
21 int n;
22 
23 main()
24 {
25 //    freopen("milk2.in","r",stdin);
26 //    freopen("milk2.out","w",stdout);
27     int i, j, k;
28     scanf("%d",&n);
29     memset(a,0,sizeof(a));
30     int len=0;
31     int minh=2000005;
32     for(i=0;i<n;i++){
33         scanf("%d %d",&j,&k);
34         len=max(len,k);
35         minh=min(j,minh);
36         a[j]++;a[k]--;
37     }
38     for(i=minh+1;i<=len;i++) a[i]+=a[i-1];
39     
40     int ans1, ans2;
41     j=k=0;
42     ans1=ans2=0;
43     for(i=minh;i<=len;i++){
44         if(a[i]){
45             j++;if(k)ans2=max(ans2,k);k=0;
46         } 
47         else{
48             k++;if(j)ans1=max(ans1,j);j=0;
49         }
50     }
51     printf("%d %d\n",ans1,ans2);
52 }
View Code

 

posted on 2015-09-06 15:45  MC幽夜  阅读(186)  评论(0编辑  收藏  举报