#include <bits/stdc++.h>
using namespace std;
#define INF 1000000007

int main(){
    int N;cin>>N;
    vector<int> a(N);
    for(int i = 0; i < N ;i++){
        cin >> a[i];
    }
    vector<int> dp(N);
    dp.assign(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() << endl;
    return 0;
}
