活动调度
成绩 | 10 | 开启时间 | 2018年03月2日 星期五 12:20 |
折扣 | 0.8 | 折扣时间 | 2018年12月2日 星期日 12:20 |
允许迟交 | 否 | 关闭时间 | 2018年12月3日 星期一 12:20 |
输入要求:
第一行为活动的个数 N(1<=N<=1 000 000) 。
接下来 N 行为 Si 和 Fi(0<=Si<Fi<=2 000 000 000) ,分别代表第 i 个活动的开始时间和结束时间。活动 i 的区间段为 [Si,Fi)
输出要求:
输出有一行 M ,为所需教室的最小数量。
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 2秒 | 64M | 0 |
![](https://i-blog.csdnimg.cn/blog_migrate/1dc9cf55f9e774bbb0fa9a76ac3d3f8a.png)
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxn 1000005
int s[Maxn];
int f[Maxn];
int N;
int main()
{
//freopen("1.txt", "r", stdin);
cin >> N;
for (int i = 0; i < N; i++)
cin >> s[i] >> f[i];
sort(s, s + N);
sort(f, f + N);
int ans = 0;
int cnt = 0;
int i=0, j=0;
while (i < N&&j < N)//类似于归并排序
{
if (s[i] < f[j])//遇到左
{
cnt++;
i++;
ans = max(ans, cnt);
}
else if (s[i]>f[j])//遇到右
{
cnt--;
j++;
}
else//遇到左右两数相等
{
cnt--;
j++;
cnt++;
i++;
ans = max(ans, cnt);
}
}
cout << ans<<endl;
return 0;
}