假设要用很多个教室对一组活动进行调度。我们希望使用尽可能少的教室来调度所有的活动。
输入要求:
第一行为活动的个数 N(1<=N<=1 000 000) 。
接下来 N 行为 Si 和 Fi(0<=Si<Fi<=2 000 000 000) ,分别代表第 i 个活动的开始时间和结束时间。活动 i 的区间段为 [Si,Fi)
输出要求:
输出有一行 M ,为所需教室的最小数量。
样例
输入(1)
11
1 4
3 5
0 6
5 7
3 8
5 9
6 10
8 11
8 12
2 13
12 14
输出(1)
5
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int m=1e6+5;
int n;
int a[m],b[m];
bool cmp(int z,int y){
return z<y;
}
int main()
{
int ans=0;
cin>>n;
for(int i=0;i<n;i++)
{
scanf("%d %d",&a[i],&b[i]);
}
sort(a,a+n,cmp); //活动开始时间
sort(b,b+n,cmp); //活动结束时间
int cal=0;
for(int i=0,j=0;i<n;)
{
if(a[i]<b[j])
{
cal++;
i++;
}
else //开始时间结束时间相等,先处理结束时间
{
cal--;
j++;
}
if(ans<cal) ans=cal;
}
cout<<ans<<endl;
return 0;
}