Problem:
Activity Selection Problem

There are $n$ acitivities with start times $\{s_i\}$ and finish times $\{t_i\}$. Assuming that a person can only work on a single activity at a time, find the maximum number of activities that can be performed by a single person.

Input

$n$
$s_1$ $t_1$
$s_2$ $t_2$
:
$s_n$ $t_n$

The first line consists of the integer $n$. In the following $n$ lines, the start time $s_i$ and the finish time $t_i$ of the activity $i$ are given.

出力

Print the maximum number of activities in a line.

Constraints

$1 \le n \le 10^5$

$1 \le s_i \lt t_i \le 10^9 (1 \le i \le n)$

Sample Input 1

5
1 2
3 9
3 5
5 9
6 8

Sample Output 1

3

Sample Input 2

3
1 5
3 4
2 5

Sample Output 2

1

Sample Input 3

3
1 2
2 3
3 4

Sample Output 3

2

Solution in C++ (judge verdict: Accepted)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define P pair<ll,ll>
#define FOR(I,A,B) for(ll I = int(A); I < int(B); ++I)
#define FORR(I,A,B) for(ll I = int((B)-1); I >= int(A); --I)
#define TO(x,t,f) ((x)?(t):(f))
#define SORT(x) (sort(x.begin(),x.end())) // 0 2 2 3 4 5 8 9
#define POSL(x,v) (lower_bound(x.begin(),x.end(),v)-x.begin()) //xi>=v  x is sorted
#define POSU(x,v) (upper_bound(x.begin(),x.end(),v)-x.begin()) //xi>v  x is sorted
#define NUM(x,v) (POSU(x,v)-POSL(x,v))  //x is sorted
#define REV(x) (reverse(x.begin(),x.end())) //reverse
ll gcd(ll a,ll b){if(a<b)swap(a,b);if(a%b==0)return b;return gcd(b,a%b);}
ll lcm(ll a,ll b){ll c=gcd(a,b);return ((a/c)*(b/c)*c);}//saisyo kobaisu
#define NEXTP(x) next_permutation(x.begin(),x.end())
const ll INF=1e18+7;
const ll MOD=1e9+7;

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);

	ll n;
	cin >> n;
	ll now = -1,ans=0;
	priority_queue<P> q;
	FOR(i,0,n){
		ll a,b;
		cin >> a >> b;
		q.push({-b,a});
	}
	while(!q.empty()){
		P next = q.top();
		q.pop();
		if(next.second<=now)continue;
		now = -next.first;
		ans++;
	}
	cout << ans << endl;
}