1 /*
2 ID: vincent63
3 LANG: C
4 TASK: milk2
5 */
6 #include <stdio.h>
7 #include<stdlib.h>
8 #include<string.h>
9 struct time{
10 int begin;
11 int end;
12 int len;
13 };
14
15 void sort(struct time t[],int n){
16 int i,j;
17 struct time temp;
18 for(i=0;i<n;i++){
19 for(j=i;j<n;j++){
20 if(t[j].begin<t[i].begin){
21
22 temp.begin=t[i].begin;
23 temp.end=t[i].end;
24 temp.len=t[i].len;
25
26 t[i].begin=t[j].begin;
27 t[i].end=t[j].end;
28 t[i].len=t[j].len;
29
30 t[j].begin=temp.begin;
31 t[j].end=temp.end;
32 t[j].len=temp.len;
33
34 }
35 }
36 }
37 }
38 void merge(struct time t[],int n){
39 int i,j;
40 for(i=0,j=1;j<n;i++,j++){
41 if(t[i].end<t[j].begin){
42 continue;
43 }else if(t[i].end>=t[j].begin&&t[i].end<=t[j].end){
44 t[i].end=t[j].end;
45 t[j].begin=t[i].begin;
46 t[i].len=t[i].end-t[i].begin;
47 t[j].len=t[j].end-t[j].begin;
48
49 }else if(t[i].end>t[j].end){
50 t[j].begin=t[i].begin;
51 t[j].end=t[i].end;
52 t[j].len=t[j].end-t[j].begin;
53 }
54 }
55 }
56 int findmax(struct time t[],int n){
57 int i,j;
58 int max=0;
59 for(i=0;i<n;i++){
60 if(t[i].len>max){
61 max=t[i].len;
62 }
63 }
64 return max;
65 }
66 int findmin(struct time t[],int n){
67 int temp[n];
68 int i;
69 int max=0;
70
71 for(i=0;i<n-1;i++){
72 temp[i]=t[i+1].begin-t[i].end;
73 if(temp[i]>0&&temp[i]>max){
74 max=temp[i];
75 }
76 }
77
78 return max;
79 }
80
81 int main () {
82 FILE *fin = fopen ("milk2.in", "r");
83 FILE *fout = fopen ("milk2.out", "w");
84
85 int n,i;
86 char buf[10];
87 char buf2[20];
88
89 fgets(buf,10,fin);
90 n=atoi(buf);
91
92 struct time t[2*n];
93
94 for(i=0;i<n;i++){
95 int b,e;
96 fgets(buf2,20,fin);
97 sscanf(buf2,"%d %d",&b,&e);
98 t[i].begin=b;
99 t[i].end=e;
100 t[i].len=e-b;
101 }
102
103 sort(t,n);
104 merge(t,n);
105
106 int max;
107
108 max=findmax(t,n);
109 int min;
110 min=findmin(t,n);
111
112 char res[10];
113 sprintf(res,"%d ",max);
114 fputs(res,fout);
115 sprintf(res,"%d\n",min);
116 fputs(res,fout);
117 printf("%d %d\n",max,min);
118 return 0;
119 }