题目链接

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;
}

这里策略是最小的数紧接着次小的数