#include <vector>
#include <bits/stdc++.h>

using namespace std;

template<typename T,T inf>
int lis(vector<T>&v){
  int N=v.size();
  vector<T>dp(N,inf);
  for(int i=0;i<N;i++)*lower_bound(dp.begin(),dp.end(),v[i])=v[i];
  int res=0;
  for(int i=0;i<N;i++)if(dp[i]!=inf)res=i;
  return res+1;
}

int main(){
  int N;
  cin>>N;
  vector<int>A(N);
  for(int i=0;i<N;i++)cin>>A[i];
  cout<<lis<int,INT_MAX>(A)<<endl;
  return 0;
}

