搞一个序列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;
}有不懂的地方欢迎随时提问(想点赞的就点赞)

京公网安备 11010502036488号