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



