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

int biSearch(int x, vector<int>& dp) { //二分查找函数
    int left = 0, right = dp.size(), mid;
    while (left <= right) {
        mid = (right + left) / 2;
        if (dp[mid] >= x)
            right = mid - 1;
        else
            left = mid + 1;
    }
    return left;
}
int lis(vector<int>& arr) {
    vector<int> dp;//用于二分划分的辅助数组
    dp.push_back(arr[0]);
    for (int i = 1; i < arr.size(); i++) {
        if (arr[i] > dp[dp.size() - 1]) {
            dp.push_back(arr[i]);
        } else {
            int t = biSearch(arr[i],
                             dp); //二分查找,找到第一个大于arr[i]的dp位置
            dp[t] = arr[i];
        }
    }
    return dp.size();
}

int main() {
    int n;
    while (cin >> n) {
        vector<int> arr(n);
        for (int i = 0; i < n; i++) //输入
            cin >> arr[i];
        cout << lis(arr) << endl; //计算最长递增子序列长度
    }
    return 0;
}