之前写过一个LIS问题
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
int main(){
int n;
int a[50001];
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
int p[50001]={0},len=0;
p[0]=a[0];
for(int i=1;i<n;i++){
if(a[i]>p[len]) p[++len]=a[i];
else
*lower_bound(p,p+len,a[i])=a[i];
}
cout<<len+1;
return 0;
}