在旧的最长子序列长度的基础上,将新的更小的元素放入其中,既保证旧的最长长度得到记录,同时为未来可能出现的更长长度创造可能性
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> s(n+1, 0);
// 6 9 1 2 6 2 1 4 5
// 6
// 6 9
// 1 9
// 1 2
// 1 2 6
// 1 2 2
// 1 1 2
// 1 1 2 4
// 1 1 2 4 5
for (int i = 1; i <= n; i++) {
cin >> s[i];
}
vector<int>d;
d.push_back(s[1]);
for (int i = 2; i <= n; i++) {
if (s[i] >= d.back()) {
d.push_back(s[i]);
}
else {
*upper_bound(d.begin(), d.end(), s[i]) = s[i];
}
}
cout << d.size();
}

京公网安备 11010502036488号