#include <iostream>
#include <vector>

using namespace std;

int main(){

  int n;
  cin >> n;
  vector<int> a(n);

  for(int i = 0; i < n; i++) cin >> a[i];
  
  const int INF = ~(1<<31);
  vector<int> dp(n,INF);

  for(int i = 0; i < n; i++){
    auto it = lower_bound(dp.begin(),dp.end(),a[i]);
    *it  = a[i];
  }
  cout << lower_bound(dp.begin(),dp.end(),INF) - dp.begin() << endl;

}

