B2.cpp 594 B

123456789101112131415161718192021222324
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. int n;
  5. while(cin >> n){
  6. int a[n+1];
  7. for(int i = 1; i <= n; i++){
  8. cin >>a[i];
  9. }
  10. reverse(a+1, a+n+1);
  11. vector<int>v;//存储长度对应的值。v[i]表示长度为i+1的最大子序列的最后一个元素的最小值
  12. v.push_back(a[1]);//第一个数直接放进去
  13. for(int i = 2; i <= n; i++){
  14. if(a[i] < *v.rbegin()){
  15. auto pos = lower_bound(v.begin(), v.end(), a[i]);
  16. *pos = a[i];//替换成较小的数
  17. }else{
  18. v.push_back(a[i]);//长度增加
  19. }
  20. }
  21. cout << v.size() << endl;
  22. }
  23. return 0;
  24. }