本题求最长上升子序列
#include <iostream>
#include <cstdio>
using namespace std;
int n,st[100010],ans;
int main()
{
freopen("manage.in","r",stdin);
freopen("manage.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
int a;
scanf("%d",&a);
if(a>st[ans]) st[++ans]=a;
else{
int l=1,r=ans;
while(l<=r){
int mid=l+r>>1;
if(st[mid]>a) r=mid-1;
else l=mid+1;
}
st[l]=a;
}
}
cout<<ans;
return 0;
}