描述
给定 $n$ 个活动,每个活动安排的时间为 $[a_i,b_i)$。求最多可以选择多少个活动,满足选择的活动时间两两之间没有重合。
输入描述:
第一行输入一个整数 $n$ $1≤n≤2⋅10^5$,表示可选活动个数。
接下来的 $n$ 行,每行输入两个整数 $a_i,b_i$ $(0≤a_i<b_i≤10^9)$,表示第 $i$ 个活动的时间。
输出描述:
输出一行一个整数,表示最多可选择的活动数。
示例1
输入:
3
1 4
1 3
3 5
输出:
2
题解
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
int n, st, ed;
struct cmp {
bool operator()(const pair<int,int>& a, const pair<int,int>& b) {
if(a.second == b.second)
return a.first < b.first;
return a.second > b.second;
}
};
int main() {
cin >> n;
priority_queue<pair<int,int>, vector<pair<int,int>>, cmp> que;
for(int i = 0; i < n; i++) {
cin >> st >> ed;
que.push({st, ed});
}
int res = 0, ed = -1;
while(!que.empty()){
auto cur = que.top(); que.pop();
if(cur.first >= ed) {
res++;
ed = cur.second;
}
}
cout << res << endl;
return 0;
}