输入要求:
第一行为活动的个数 N(1<=N<=1 000 000) 。
接下来 N 行为 Si 和 Fi(0<=Si<Fi<=2 000 000 000) ,分别代表第 i 个活动的开始时间和结束时间。活动 i 的区间段为 [Si,Fi)
输出要求:
输出有一行 M ,为所需教室的最小数量。
测试输入
11 1 4 3 5 0 6 5 7 3 8 5 9 6 10 8 11 8 12 2 13 12 14
测试输出
5
源代码
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1000004;
int Si[N]={0}, Fi[N]={0};
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
scanf("%d%d",&Si[i], &Fi[i]);
}
sort(Si,Si+n);
sort(Fi,Fi+n);
int i=0,j=0;
int max=0,cnt=0;
while( i<n && j<n )
{
if(Si[i]<Fi[j])
{
cnt++;
i++;
if(cnt>max) { max=cnt; }
}
else if(Si[i]>Fi[j])
{
cnt--;
j++;
}
else
{
cnt--;
i++;
cnt++;
if (cnt>max) { max=cnt; }
j++;
}
}
cout<<max<<endl;
return 0;
}