#include<bits/stdc++.h>
using namespace std;
const long long INF=1LL<<60;

int main(){
  int n;
  cin >> n;
  vector<long long> a(n);
  for(int i=0;i<n;++i){
    cin >> a[i];
  }
  int N=(int)a.size();
  vector<long long> dp(N,INF);
  for(int i=0;i<N;++i){
    *lower_bound(dp.begin(),dp.end(),a[i])=a[i];
  }

  cout << lower_bound(dp.begin(),dp.end(),INF)-dp.begin();
  cout << endl;
  return 0;
}

