有若干个活动,第i个开始时间和结束时间是[Si,fi),活动之间不能交叠,要把活动都安排完,至少需要几个教室?
输入
第一行一个正整数n (n <= 10000)代表活动的个数。 第二行到第(n + 1)行包含n个开始时间和结束时间。 开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000
输出
一行包含一个整数表示最少教室的个数。
输入示例
3 1 2 3 4 2 9
输出示例
2
#include<cstdio>
#include<algorithm>
using namespace std;
struct node
{
long long str;
long long end;
}arr[10000+11];
bool cmp(node a,node b)
{
if(a.str==b.str)
return a.end<b.end;
return a.str<b.str;
}
long long b[10000+11];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;++i)
scanf("%lld%lld",&arr[i].str,&arr[i].end);
sort(arr,arr+n,cmp);
b[0]=arr[0].end;//记录结束的时间
int i,j;
long long sum=1;
for(i=1;i<n;++i)
{
for(j=0;j<sum;++j)
{
if(arr[i].str>=b[j])//成立代表可以用这个教室,教室不增加,更新结束时间
{
b[j]=arr[i].end;
break;
}
}
if(j==sum)//代表找不到教室,那就增加教室并更新结束时间
{
b[sum]=arr[i].end;
++sum;
}
}
printf("%lld\n",sum);
return 0;
}