#include <iostream>
#include <set>
using namespace std;
int main() {
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
multiset<int> towers;
multiset<int>::iterator it;
for(int i=0;i<n;i++)
{
it = towers.upper_bound(a[i]);
if(it == towers.end())
{
towers.insert(a[i]);
}
else
{
towers.erase(it);
towers.insert(a[i]);
}
}
cout<<towers.size()<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c2V0Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKSB7CgoJaW50IG47CgljaW4+Pm47CgkKCWludCBhW25dOwoJZm9yKGludCBpPTA7aTxuO2krKykKCXsKCQljaW4+PmFbaV07Cgl9CgoJbXVsdGlzZXQ8aW50PiB0b3dlcnM7CgltdWx0aXNldDxpbnQ+OjppdGVyYXRvciBpdDsKCWZvcihpbnQgaT0wO2k8bjtpKyspCgl7CgkJaXQgPSB0b3dlcnMudXBwZXJfYm91bmQoYVtpXSk7CgkJaWYoaXQgPT0gdG93ZXJzLmVuZCgpKQoJCXsKCQkJdG93ZXJzLmluc2VydChhW2ldKTsKCQl9CgkJZWxzZQoJCXsKCQkJdG93ZXJzLmVyYXNlKGl0KTsKCQkJdG93ZXJzLmluc2VydChhW2ldKTsKCQl9Cgl9CgoKCWNvdXQ8PHRvd2Vycy5zaXplKCk8PGVuZGw7CgoJcmV0dXJuIDA7Cn0=