#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
vector<int> subsequence;
subsequence.push_back(a[0]);
for(int i=1;i<n;i++)
{
if(subsequence.back() < a[i])
{
subsequence.push_back(a[i]);
}
else
{
int id = lower_bound(subsequence.begin(),subsequence.end(),a[i]) - subsequence.begin();
subsequence[id] = a[i];
}
}
cout<<subsequence.size()<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKSB7CgkKCWludCBuOwoJY2luPj5uOwoJCglpbnQgYVtuXTsKCWZvcihpbnQgaT0wO2k8bjtpKyspCgl7CgkJY2luPj5hW2ldOwoJfQoJCgl2ZWN0b3I8aW50PiBzdWJzZXF1ZW5jZTsKCQoJc3Vic2VxdWVuY2UucHVzaF9iYWNrKGFbMF0pOwoJCglmb3IoaW50IGk9MTtpPG47aSsrKQoJewoJCWlmKHN1YnNlcXVlbmNlLmJhY2soKSA8IGFbaV0pCgkJewoJCQlzdWJzZXF1ZW5jZS5wdXNoX2JhY2soYVtpXSk7CgkJfQoJCWVsc2UKCQl7CgkJCWludCBpZCA9IGxvd2VyX2JvdW5kKHN1YnNlcXVlbmNlLmJlZ2luKCksc3Vic2VxdWVuY2UuZW5kKCksYVtpXSkgLSBzdWJzZXF1ZW5jZS5iZWdpbigpOwoJCQlzdWJzZXF1ZW5jZVtpZF0gPSBhW2ldOwoJCX0KCX0KCQoJY291dDw8c3Vic2VxdWVuY2Uuc2l6ZSgpPDxlbmRsOwoJcmV0dXJuIDA7Cn0=