1081: 最长上升子序列Ⅱ
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int num[N];
int n;
int main(){
while(scanf("%d",&n)!=EOF){
for(int i=1;i<=n;i++){
scanf("%d",&num[i]);
}
vector<int> len;
len.push_back(INT_MIN);
for(int i=1;i<=n;i++){
int l=len.size();
auto find=lower_bound(len.begin(),len.end(),num[i]);
if(find!=len.end())
len[find-len.begin()]=num[i];
else{
len.push_back(num[i]);
}
}
printf("%d\n",len.size()-1);
}
}

浙公网安备 33010602011771号