搞一个序列d,不断维护这个序列
以【0,8,4,12,2】为例
第一趟d={0,0}
第二趟d={0,0,8}
第三趟d={0,0,4}
第四趟d={0,0,4,12}
第五趟d={0,0,2,12}
输出的答案是3
#include<bits/stdc++.h> using namespace std; int main(){ int n; while(cin>>n){ int len=1; vector<int> d(n+1,0),v(n); for(int i=0;i<n;i++) cin>>v[i]; d[len]=v[0]; for(int i=0;i<n;i++){ if(v[i]>d[len]) d[++len]=v[i]; else{ int l=1,r=len,mid,pos=0; while(l<r){ mid=(l+r)>>1; if(d[mid]<v[i]){ pos=mid; l=mid+1; } else r=mid; } d[pos+1]=v[i]; } } cout<<len<<endl; } return 0; }
有不懂的地方欢迎随时提问(想点赞的就点赞)