#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<cmath>
#include<vector>
#include<algorithm>
#include<set>
using namespace std;
int ans;
const int inf = 0x3f3f3f3f;
const int N = 1010;
typedef long long ll;
int m;
int n;
int t=1;
int a[2500];
int dp[2500];
int sum;
typedef pair<double,double> pii;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
dp[i]=1;
for(int j=1;j<i;j++){
if(a[i]>a[j])
dp[i] = max(dp[j]+1,dp[i]);
}
ans=max(ans,dp[i]);
}
cout<<ans;
return 0;
}
/*5
4 2 3 1 5*/
为数不多的一维dp,一开始尝试用二维表示,结果还是不尽如人意,想到一维dp就好解很多了