题目链接
https://ac.nowcoder.com/acm/contest/911/G
#include<iostream> #include<algorithm> using namespace std; int main(){ int a[100000],b[100000],n; cin>>n; for(int i=0;i<n;i++){ scanf("%d",&a[i]); } b[0]=a[0]; int k=0; for(int i=1;i<n;i++){ if(b[k]<a[i]) b[++k]=a[i]; else { *lower_bound(b,b+k+1, a[i])=a[i];//lower_bound返回迭代器 } } cout<<k+1<<endl; }
这里策略是最小的数紧接着次小的数