描述

给定 $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;
}
Last modification:April 1, 2022
如果觉得我的文章对你有用,请随意赞赏