https://pintia.cn/problem-sets/994805046380707840/exam/problems/994805063166312448?type=7&page=1
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> nums(n, 0);
for (int i=0; i < n; ++i) {
cin >> nums[i];
}
vector<int> sortedNums;
for (auto it=nums.begin(); it != nums.end(); ++it) {
int l=0, r = sortedNums.size()-1;
while (l <= r) {
int mid = (l + r) / 2;
if (sortedNums[mid] > *it) r = mid - 1;
else l = mid + 1;
}
if (l >= sortedNums.size()) {
sortedNums.push_back(*it);
}
else sortedNums[l] = *it;
}
cout << sortedNums.size() << endl;
return 0;
}