提交时间:2022-07-19 12:08:17

运行 ID: 52403

#include <bits/stdc++.h> using namespace std; const int N = 5e5 + 10; int n, vis[N], ans, tl = 1e9 + 10, tr; struct rage { int l, r; bool operator < (const rage &B) const { return r - l > B.r - B.l; } }blk[N]; void dfs(int u, int dpth) { vis[u] = 1; int fl = blk[u].l, fr = blk[u].r, flg = 1; for(int i = u + 1; i <= n; i++) { if(blk[i].l >= fl and blk[i].r <= fr) { flg = 0; dfs(i, dpth + 1); } } if(flg) ans = max(dpth, ans); return; } int main () { scanf("%d", &n); for(int i = 1; i <= n; i++) { scanf("%d%d", &blk[i].l, &blk[i].r); tl = min(tl, blk[i].l); tr = max(tr, blk[i].r); } sort(blk + 1, blk + n + 1); blk[0].l = tl, blk[0].r = tr; dfs(0, 0); printf("%d\n", ans); return 0; }