(파이썬)

N = int(input())

arr = list(map(int,input().split()))

L = [arr[0]]

for i in range(1,N):

    if arr[i] > L[-1]:

        L.append(arr[i])

        continue

    left = 0

    right = len(L) - 1

    while left<right:

        mid = (left+right)//2

        if L[mid] < arr[i]:

            left = mid + 1

        else:

            right = mid

    L[right] = arr[i]

print(len(L))

print(*L)



N: 주어지는 배열의 길이

arr: 주어지는 배열

L에 LIS를 담는다고할떄

주어진 arr을 1번째부터 탐색하면서 만약 L의 마지막보다 arr[i] 가 크다면 -> L에다가 arr[i]추가

만약 아니라면 -> 갈아끼울 것을 이분탐색으로 찾음, arr[i]가 L의 원소보다 최초로 커지는 곳을 찾고 기존에 있던 것과 갈이끼움

이렇게 해서 LIS를 구할 수 있다고 알고있는데 14003이 자꾸 틀렸다고 나오네요

이 문제에 특이한 조건도 없는데 제가 잘못알고 있는건가요