题意分析
要用nlogn的算法 ,否则会被卡死
代码总览
#include<bits/stdc++.h>
using namespace std;
const int nmax = 100005;
int a[nmax];
int dp[nmax];
int main(){
int n;
while(scanf("%d",&n)!=EOF){
memset(a,0,sizeof a);
memset(dp,0,sizeof dp);
for(int i = 1;i<=n;++i) scanf("%d",&a[i]);
reverse(a+1,a+n+1);
dp[1] = a[1];
int len = 1;
for(int i = 2;i<=n;++i){
if(a[i] > dp[len]) dp[++len] = a[i];
else{
int p = lower_bound(dp+1,dp+len+1,a[i]) - dp;
dp[p] = a[i];
}
}
// int ans = len;
int ans = 0;
for(int i = 1;i<=n;++i){
if(dp[i]!=0) ans++;
}
printf("%d\n",ans);
}
return 0;
}