#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define f(i,a,b) for(int i = a;i < b;i++) #define pb push_back #define itr iterator #define get(t) int t;cin >> t; #define fi first #define se second #define mp make_pair #define foreach(it,x) for(__typeof(x.begin()) it=x.begin();it!=x.end(); it++) #define all(x) x.begin(),x.end() typedef long long ll; typedef vector vi; typedef vector > vii; typedef vector vd; inline void sfr (int *a) { char c = 0; while(c<33) c = fgetc(stdin); *a = 0; while(c>33) { *a = *a*10 + c - '0'; c = fgetc(stdin); } } inline void sfp(int a){ char c[1000]; sprintf(c,"%d",a); puts(c); } void print(set A){ set::iterator it = A.begin(); while(it != A.end()){ cout << *it << " "; it++; } cout << endl; } int main(){ get(n); setA; f(i,0,n){ get(x); if(A.size() == 0)A.insert(x); else{ if(x < *A.begin()){ A.insert(x); } else if(x > *A.rbegin()){ A.erase(--A.end()); A.insert(x); } else if(A.find(x) == A.end()){ set::iterator it = A.upper_bound(x); it--; A.erase(it); A.insert(x); } } } cout << A.size() << endl; }