题面
题解
单调队列二分优化 O(nlogn)
代码
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
typedef pair<int, int> PII;
const int N = 5010;
int n;
PII arr[N];
int f[N];
int main() {
cin >> n;
for (int i = 1; i <= n; i++) cin >> arr[i].first >> arr[i].second;
sort(arr + 1, arr + n + 1);
int len = 0;
for (int i = 1; i <= n; i++) {
int l = 0, r = len;
while (l < r) {
int mid = (l + r + 1) >> 1;
if (f[mid] < arr[i].second) l = mid;
else r = mid - 1;
}
len = max(len, r + 1);
f[r + 1] = arr[i].second;
}
cout << len << endl;
return 0;
}