n=int(input())
a=list(map(int,input().split()))
a.insert(0,0)
b=list()
b.insert(0,0)
b.insert(1,a[1])
def er_find(x):
l,r=1,len(b)-1
while l[HTML_REMOVED]>1
if x<=b[mid]:
r=mid
else:
l=mid+1
return l
def main():#二分做法
for i in range(2,n+1):#大则加入
if a[i]>b[len(b)-1]:
b.append(a[i])
else: #小则替换
x=er_find(a[i])#二分O(log n)
b[x]=a[i]
print(len(b)-1)
main()