#include<iostream>#include<algorithm>#include<vector>usingnamespace std;intmain(void){int n; cin >> n;
vector<int>arr(n);for(int i =0; i < n;++i)cin >> arr[i];
vector<int>stk;//模拟堆栈
stk.push_back(arr[0]);for(int i =1; i < n;++i){if(arr[i]> stk.back())//如果该元素大于栈顶元素,将该元素入栈
stk.push_back(arr[i]);else//替换掉第一个大于或者等于这个数字的那个数*lower_bound(stk.begin(), stk.end(), arr[i])= arr[i];}
cout << stk.size()<< endl;return0;}
二、AcWing 897. 最长公共子序列
1. 问题描述
2. 问题解决
#include<iostream>usingnamespace std;constint N =1010;int n, m;char a[N], b[N];int f[N][N];intmain(){
cin >> n >> m >> a +1>> b +1;for(int i =1; i <= n; i++){for(int j =1; j <= m; j++){if(a[i]== b[j]){
f[i][j]= f[i -1][j -1]+1;}else{
f[i][j]=max(f[i -1][j], f[i][j -1]);}}}
cout << f[n][m]<<'\n';return0;}
三、蓝桥杯十一届 门牌制作
1. 问题描述
2. 问题解决
#include<stdio.h>intmain(){int count =0;for(int i =0; i <2021;i++){int num = i;while(num){if(num %10==2){
count++;}
num /=10;}}printf("%d", count);return0;}