/* ID:mingcha1 PROG: milk2 LANG: C++ */ #include<iostream> #include<fstream> using namespace std; ofstream fout ("milk2.out"); ifstream fin ("milk2.in"); const int SIZE=5005; //#define DEBUG_a //#define DEBUG_set struct node{ int bgn,end,v; }; int num,n; int cmp(void const* a,void const *b){ return (*(node*)a).bgn>(*(node*)b).bgn?1:-1; } void forset(node a[SIZE],node set[SIZE]){ set[num].bgn=a[num].bgn; set[num].end=a[num].end; num++; int i; for(i=1;i<n;++i){ if(a[i].bgn<=set[num-1].end && a[i].end>set[num-1].end){ set[num-1].end=a[i].end; } if(a[i].bgn>set[num-1].end){ num++; set[num-1].bgn=a[i].bgn; set[num-1].end=a[i].end; } } for(int i=0;i<num;++i){ set[i].v=set[i].end-set[i].bgn; } } int main(){ node a[SIZE],set[SIZE]; fin>>n; for(int i=0;i<n;++i){ fin>>a[i].bgn>>a[i].end; } qsort(a,n,sizeof(a[0]),cmp); #ifdef DEBUG_a fout<<"About a:*************"<<endl; for(int i=0;i<n;++i){ fout<<a[i].bgn<<" "<<a[i].end<<endl; } #endif forset(a,set); #ifdef DEBUG_set fout<<"About set:****************"<<endl; fout<<"num:"<<num<<endl; for(int i=0;i<num;++i){ fout<<set[i].bgn<<" "<<set[i].end<<endl; } #endif int max1=set[0].v; int max2=0; for(int i=1;i<num;++i){ if(max1<set[i].v){ max1=set[i].v; } if(max2<set[i].bgn-set[i-1].end){ max2=set[i].bgn-set[i-1].end; } } fout<<max1<<" "<<max2<<endl; }
usaco_milk2
最新推荐文章于 2024-07-28 21:35:11 发布