#include using namespace std; int main() { int n; cin >> n; vector> range(n); // ????A[i]????? [L_i, R_i] for (int i = 0; i < n; ++i) { cin >> range[i].first >> range[i].second; } // ??????????dp[value]??????? value ??????????? map dp; // ??map?????value???LIS?? // ?????? for (int i = 0; i < n; ++i) { int L = range[i].first, R = range[i].second; map new_dp = dp; // ???????????dp // ????? [L, R] ???? for (int v = L; v <= R; ++v) { // ??????v?????dp[v] auto it = dp.lower_bound(v); if (it != dp.begin()) { --it; // ????v???? new_dp[v] = max(new_dp[v], it->second + 1); } else { // ??????v??????????????1??? new_dp[v] = max(new_dp[v], 1); } } // ?????dp????dp? dp = new_dp; } // ????dp????? int maxLIS = 0; for (auto& entry : dp) { maxLIS = max(maxLIS, entry.second); } cout << maxLIS << endl; return 0; }