void main()
{
    long n = readln.chomp.to!long;
    long[] a = new long[n];
    foreach (i; 0 .. n)
    {
        a[i] = readln.chomp.to!long;
    }

    auto rbt = new RedBlackTree!(long, "a < b", true);
    foreach (x; a)
    {
        auto l = rbt.lowerBound(x);
        if (!l.empty) rbt.removeKey(l.back);
        rbt.insert(x);
    }

    rbt.length.writeln;
}

import std.stdio;
import std.string;
import std.array;
import std.conv;
import std.algorithm;
import std.range;
import std.math;
import std.numeric;
import std.container;
import std.typecons;
import std.ascii;
import std.uni;