题目链接:http://train.usaco.org/usacoprob2?a=cdRA4ZUANoo&S=milk2
题意:给奶牛挤奶,问一段时间内有一只牛被挤的最长时间,和没有牛被挤的最长时间
题解:使用一个数组作为时间轴,直接从头到尾跑一遍
另:fill 貌似左开右闭
/*
ID: njxyjxc1
LANG: C++
TASK: milk2
*/
#include <bits/stdc++.h>
using namespace std;
int n;
const int maxn=5050;
int s[maxn],e[maxn];
int t[(int)1e6+5];
int main ()
{
ios::sync_with_stdio(0);
freopen("milk2.in","r",stdin);
freopen("milk2.out","w",stdout);
int mini=1e9,maxi=-1;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>s[i]>>e[i];
fill(t+s[i],t+e[i],1);//fill 貌似左开右闭
mini=min(mini,s[i]);
maxi=max(maxi,e[i]);
}
int ans1,ans2,tmp1,tmp2;
ans1=-1;
for(int i=mini;i<maxi;i++)
{
if(t[i])
{
tmp1=0;
for(int j=i;j<=maxi;j++)
{
if(t[j])
{
tmp1++;
}
else
{
i=j;
ans1=max(ans1,tmp1);
break;
}
}
}
}
ans1=max(ans1,tmp1);
ans2=-1;
tmp1=0;
for(int i=mini;i<maxi;i++)
{
if(t[i]==0)
{
tmp1=0;
for(int j=i;j<=maxi;j++)
{
if(t[j]==0)
{
tmp1++;
}
else
{
i=j;
ans2=max(ans2,tmp1);
break;
}
}
}
}
ans2=max(ans2,tmp1);
cout<<ans1<<' '<<ans2<<'\n';
return 0;
}