此题我们可以注意到a(i)是小于等于1e6的,因此我们可以定义一个数组来存储每个数耗时最短的考试结束的时间。然后从第一个考试开始的时间开始,如果之后存在考试的开始和结束时间均在前一个考试结束之前,则放弃上一场考试进行这一场。
下面附上代码
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e6 + 5;
int a[N], b[N];
int main()
{
int n, ans = 0, t=0, c;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i] >> c;
if (b[a[i]] == 0 || b[a[i]] > c)//用b数组来存储每场考试的最早结束时间
b[a[i]] = c;
}
sort(a + 1, a + n + 1);
for (int i = a[1]; i <= a[n]; i++)
{
if (t <= i && b[i] != 0)//一场考试结束进行下一场
{
ans++;
t = b[i];
}
if (t > i && b[i] < t)//更新考试
{
if (b[i] != 0)
t = b[i];
}
}
cout << ans;
}