#include <bits/stdc++.h>
using namespace std;
struct Calendar {
  long long year;
  long long month;
  long long day;
  long long dat[2][13];
  Calendar(long long y, long long m, long long d) {
    year = y;
    month = m;
    day = d;
    dat[0][0] = dat[1][0] = 0;
    dat[0][1] = dat[1][1] = 31;
    dat[0][2] = dat[1][2] = 28;
    dat[0][3] = dat[1][3] = 31;
    dat[0][4] = dat[1][4] = 30;
    dat[0][5] = dat[1][5] = 31;
    dat[0][6] = dat[1][6] = 30;
    dat[0][7] = dat[1][7] = 31;
    dat[0][8] = dat[1][8] = 31;
    dat[0][9] = dat[1][9] = 30;
    dat[0][10] = dat[1][10] = 31;
    dat[0][11] = dat[1][11] = 30;
    dat[0][12] = dat[1][12] = 31;
    dat[1][2] = 29;
  }
  int uruu() {
    if (year % 4 == 0) {
      if (year % 400 != 0 && year % 100 == 0) {
        return 0;
      } else {
        return 1;
      }
    }
    return 0;
  }
  int uruu(long long y) {
    if (y % 4 == 0) {
      if (y % 400 != 0 && y % 100 == 0) {
        return 0;
      } else {
        return 1;
      }
    }
    return 0;
  }
  long long pday(long long d) {
    day += d;
    for (;; month++) {
      if (month >= 13) {
        year++;
        month = 1;
      }
      if (dat[uruu()][month] < day) {
        day -= dat[uruu()][month];
      } else {
        break;
      }
    }
    pmonth(0);
    return d;
  }
  long long pmonth(long long m) {
    month += m;
    for (;; year++) {
      if (month > 12) {
        month -= 12;
      } else {
        break;
      }
    }
    return m;
  }
  long long pyear(long long y) {
    year += y;
    return y;
  }
  long long dif(Calendar c) {
    long long ans = 0;
    Calendar a(year, month, day);
    ans -= a.day;
    ans += c.day;
    a.day = 0;
    c.day = 0;
    for (; a.month >= 1; a.month--) {
      ans -= dat[a.uruu()][a.month - 1];
    }
    for (; c.month >= 1; c.month--) {
      ans += dat[c.uruu()][c.month - 1];
    }
    for (; a.year != c.year; a.year++) {
      ans += 365;
      if (a.uruu()) ans++;
    }
    return ans;
  }
};
int main() {
  int n, ans = 0;
  ;
  long long a, dp[100001];
  cin >> n;
  fill(dp, dp + 100001, 1000000000);
  for (int i = 0; i < (int)n; i++) {
    cin >> a;
    *lower_bound(dp, dp + 100001, a) = a;
  }
  for (int i = 0; i < (int)n; i++) {
    if (dp[i] == 1000000000) {
      ans = i;
      break;
    }
  }
  cout << ans << endl;
}
