#includeusing namespace std;int a[100];int b[100];//b中存储的不是最长上升子序列 int len = 1;//字符串长度为1时 最长上升子序列长度为1 //二分查找 int bs(int x){int l = 1,r = len;int mid;//返回第一个大于或等于x的元素的下标 while(l <= r){mid = l+(r-l)/2;if(x > b[mid]) l = mid + 1;else r = mid - 1;}return l;}int main(){int n,j;cin>>n;for(int i=1;i<=n;i++) cin>>a[i];b[1] = a[1];for(int i=2;i<=n;i++){if(a[i] > b[len])b[++len] = a[i];else{//不断更新得到可以得到的最大的len长度 j = bs(a[i]);b[j] = a[i];}}printf("%d",len);return 0;}