题意:
题意很简单,最开始的时候想要用优先队列存储时间,用map存储对应时间起点与终点。按时间轴顺序排列的思路是没错的,但是忽略了很重要的一点,一个时间起点可能会有多个对应的时间终点。改用结构体存储,定义cmp,得到时间轴。有两个变量表示总的时间起点和终点,注意起点与终点变换的条件,不断向后遍历就可以了。
代码实现:
/*
ID: eashion
LANG: C++
TASK: milk2
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#define MAX 5050
using namespace std;
struct node{
int Tstart,Tend;
};
int N;
int T1;//起点
int T2;//终点
int res1,res2;
node Nlis[MAX];
bool cmp(const node a,const node b){
if( a.Tstart != b.Tstart ){
return a.Tstart < b.Tstart;
}
return a.Tend < b.Tend;
}
int main()
{
freopen("milk2.in","r",stdin);
freopen("milk2.out","w",stdout);
scanf("%d",&N);
for( int i = 0; i < N; i++ ){
scanf("%d%d",&Nlis[i].Tstart,&Nlis[i].Tend);
}
sort(Nlis,Nlis+N,cmp);
T1 = Nlis[0].Tstart;
T2 = Nlis[0].Tend;
res1 = res2 = 0;
for( int i = 0; i < N; i++ ){
if( T2 >= Nlis[i].Tstart ){
T2 = max( T2,Nlis[i].Tend );
res1 = max( T2-T1,res1 );
}
else{
T1 = Nlis[i].Tstart;
res2 = max( res2,T1-T2 );
T2 = Nlis[i].Tend;
}
}
printf("%d %d\n",res1,res2);
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-11 17:02:47