n = int(input())
a = list(map(int,input().split()))
dp = [a[0]]
for i in range(1,n):
if a[i] > dp[-1]:
dp.append(a[i])
else:
st = 0
en = len(dp) - 1
mi = (st+en)//2
while True:
if a[i] > dp[mi]:
st = mi
elif a[i] < dp[mi]:
en = mi
else:
break
if en - st <= 1:
if dp[st] != a[i]:
dp[en] = a[i]
break
mi = (st+en) // 2
print(len(dp))
biA9IGludChpbnB1dCgpKQphID0gbGlzdChtYXAoaW50LGlucHV0KCkuc3BsaXQoKSkpCmRwID0gW2FbMF1dCmZvciBpIGluIHJhbmdlKDEsbik6CiAgICBpZiBhW2ldID4gZHBbLTFdOgogICAgICAgIGRwLmFwcGVuZChhW2ldKQogICAgZWxzZToKICAgICAgICBzdCA9IDAKICAgICAgICBlbiA9IGxlbihkcCkgLSAxCiAgICAgICAgbWkgPSAoc3QrZW4pLy8yCiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgaWYgYVtpXSA+IGRwW21pXToKICAgICAgICAgICAgICAgIHN0ID0gbWkKICAgICAgICAgICAgZWxpZiBhW2ldIDwgZHBbbWldOgogICAgICAgICAgICAgICAgZW4gPSBtaQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgaWYgZW4gLSBzdCA8PSAxOgogICAgICAgICAgICAgICAgaWYgZHBbc3RdICE9IGFbaV06CiAgICAgICAgICAgICAgICAgICAgZHBbZW5dID0gYVtpXQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgbWkgPSAoc3QrZW4pIC8vIDIKcHJpbnQobGVuKGRwKSk=