Problem:
Score : 500 points

Problem Statement

You are given a sequence with N integers: A = \{ A_1, A_2, \cdots, A_N \}.
For each of these N integers, we will choose a color and paint the integer with that color. Here the following condition must be satisfied:

If A_i and A_j (i < j) are painted with the same color, A_i < A_j.

Find the minimum number of colors required to satisfy the condition.

Constraints

1 \leq N \leq 10^5

0 \leq A_i \leq 10^9

Input

Input is given from Standard Input in the following format:

N
A_1
:
A_N

Output

Print the minimum number of colors required to satisfy the condition.

Sample Input 1

5
2
1
4
5
3

Sample Output 1

2

We can satisfy the condition with two colors by, for example, painting 2 and 3 red and painting 1, 4, and 5 blue.

Sample Input 2

4
0
0
0
0

Sample Output 2

4

We have to paint all the integers with distinct colors.

Solution in JavaScript (node.js v5.12) (judge verdict: Time Limit Exceeded)



function Main(input) {
  input = input.split("\n");
  var N = parseInt(input[0]);
  input.shift();
  var A = input.map(i => parseInt(i));
  A.splice(N,A.length);
  var c = [A[0]];
  for(var i=1;i<N;i++){
    for(var j=0;j<c.length;j++){
      var flag=0;
      if(c[j]<A[i]){
        c[j]=A[i];
        flag=1;
        break;
      }
    }
    if(flag==0){
      c.push(A[i]);
    }
    c.sort(function(a,b){return b-a});
  }
  var ans = c.length;

  console.log('%s', ans);
  return ans;
}

function debug(n){
  var input = document.getElementById("input"+n).value;
  var ans=Main(input);
  var result="WA";
  if(ans==document.getElementById("output"+n).value.split("\n")[0]){
    result="AC";
  }
  document.getElementById("result"+n).innerHTML=result;
}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));