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 C (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<stdio.h>
#include<stdlib.h>
int main(){
    int n;
    scanf("%d",&n);
    int *arr=(int *)malloc(sizeof(int)*n);
    for(int i=0;i<n;i++)
    scanf("%d",arr+i);
    int ans=0;
    int i=0;
    int j;
    while(i<n){
        if(arr[i]==-1)
        {
            i+=1;
            continue;
        }
        int k=i;
        j=i+1;
        if(j<n && arr[j]!=-1){
            ans++;
            while(j<n){
                if(arr[k]<arr[j]){
                    arr[k]=-1;
                    k=j;
                }
                j+=1;
            }
            arr[k]=-1;
        }
        i++;
    }
    if(arr[n-1]!=-1)
    ans++;
    printf("%d",ans);
}
/*n=int(input())
l=[int(input()) for i in range(n)]
ans=0
i=0
while(i<n):
    if(l[i]==-1):
        i+=1
        continue
    k=i
    j=i+1
    if(j<n and l[j]!=-1):
        ans+=1
        while(j<n):
            if(l[k]<l[j]):
                l[k]=-1
                #ans+=1
                k=j
            j+=1
        #if(l[k])
        l[k]=-1
    i+=1
if(l[-1]!=-1):
    ans+=1
print(ans)*/