#include <iostream>
#include <algorithm>
using namespace std;

int LIS[100010];
int main() {
    int N; cin >> N;
    fill(LIS, LIS + N + 1, 1 << 30);
    for(int i=0; i<N; i++) {
        int val; cin >> val;
        LIS[ lower_bound(LIS, LIS + N, val) - LIS ] = val;
    }
    cout << lower_bound(LIS, LIS + N, 1 << 30) - LIS << endl;
    return 0;
}
