/*
ID: cjn77881
LANG: C++
TASK: milk2
*/
#include <stdio.h>
typedef struct Barn Barn;
struct Barn{
int l,r;
bool v;
};
int N,ans_nmmax,ans_max,pre,loc;
Barn a[5001];
bool in(int x,int y){
if (x == y) return false;
if (a[x].l > a[y].r) return false;
if (a[y].l > a[x].r) return false;
if (a[x].r < a[y].l) return false;
if (a[y].r < a[x].l) return false;
return true;
}
int min(int x,int y){
return x<y?x:y;
}
int max(int x,int y){
return x>y?x:y;
}
void merge(int x,int y){
a[x].l = min(a[x].l,a[y].l);
a[x].r = max(a[x].r,a[y].r);
a[y].v = true;
a[y].l = 2147483647;
a[y].r = 2147483647;
return;
}
void swap(int x,int y){
Barn tmp;
tmp = a[x];
a[x] = a[y];
a[y] = tmp;
return;
}
void quickSort(int h,int t){
int x = a[(h + t)>>1].l;
int i = h;
int j = t;
while (i <= j){
while (a[i].l < x) i++;
while (a[j].l > x) j--;
if (i <= j){
swap(i,j);
i++;
j--;
}
}
if (i < t) quickSort(i,t);
if (j > h) quickSort(h,j);
return;
}
int main(){
FILE *fin = fopen("milk2.in","r");
FILE *fout = fopen("milk2.out","w");
fscanf(fin,"%d",&N);
for (int i=0;i<N;i++) fscanf(fin,"%d %d",&a[i].l,&a[i].r);
quickSort(0,N-1);
for (int i=0;i<N;i++)
for (int j=0;j<N;j++){
if ((!a[i].v) && (!a[j].v) && (in(i,j))) merge(i,j);
}
quickSort(0,N-1);
//for (int i=0;i<N;i++) if (!a[i].v) printf("i=%d %d %d\n",i,a[i].l,a[i].r);
for (int i = 0;i<N;i++) if (!a[i].v){
pre = a[i].r;
ans_max = a[i].r - a[i].l;
a[i].v = true;
break;
}
ans_nmmax = 0;
for (int i=0;i<N;i++) if (!a[i].v){
if (ans_nmmax < a[i].l - pre){
ans_nmmax = a[i].l - pre;
loc = i;
}
//ans_nmmax = min(ans_nmmax,a[i].l - pre);
pre = a[i].r;
ans_max = max(ans_max,a[i].r - a[i].l);
}
//if (ans_nmmax == 2147483647) ans_nmmax = 0;
fprintf(fout,"%d %d\n",ans_max,ans_nmmax);
return 0;
}
USACO 1.3.1_milk2
最新推荐文章于 2024-05-10 21:22:09 发布