usaco水题。
还是模拟,放下每次的开始时间和结束时间,开始时间+1,结束时间-1。
从头往后遍历,st+=sum[i];
当st>0时,说明此时有人工作,当st==0时,说明此时没人工作。
/*
ID: rowanha3
LANG: C++
TASK: milk2
*/
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int sum[1000001];
int main()
{
freopen("milk2.in","r",stdin);
freopen("milk2.out","w",stdout);
int n;
cin>>n;
int i,a,b;
int ii;
int jj;
ii=1000001;
jj=0;
for(i=0;i<n;i++)
{
cin>>a>>b;
sum[a]++;
sum[b]--;
if(ii>a)ii=a;
if(jj<b)jj=b;
}
int st=0;
int maxx,minn;
maxx=0;
minn=0;
a=b=0;
for(i=ii;i<=jj;i++)
{
st+=sum[i];
if(st>0)
{
a++;
if(b!=0&&minn<b)minn=b;
b=0;
}
if(st==0)
{
if(a!=0&&maxx<a)maxx=a;
a=0;
b++;
}
}
printf("%d %d\n",maxx,minn);
fclose(stdin);
fclose(stdout);
return 0;
}