통 포개기

면접 대비

시간 제한1초메모리 제한128 MB

요약
통 크기 수열에서 앞쪽 K개의 통을 바로 다음 K개의 통 중 서로 다른 더 큰 통에 각각 대응시킬 수 있는 최대 K를 구합니다.
난이도

보통10점 중 5점

유형
이분 탐색, 그리디, 정렬
정답자
아직 제출이 없습니다

문제

공장 창고에 빈 통들이 한 줄로 나란히 놓여 있다. 창고 관리자는 일부 통을 다른 통 안에 포개어 넣어, 줄의 왼쪽 끝에 빈 공간을 만들고자 한다.

로봇은 오직 한 가지 동작으로만 통을 옮긴다. 통 하나를 집어 오른쪽으로 옮긴 뒤, 자기보다 크기가 엄격히 큰 통 안에 넣는다. 안전 규정상 한 통은 다른 통을 최대 하나만 담을 수 있으며, 담기는 안쪽 통은 비어 있어야 한다.

관리자는 이렇게 만들어진 이중 통이 모두 줄의 왼쪽 끝에 모이기를 원한다. 즉, 왼쪽에서부터 KK개의 통과 그 바로 오른쪽에 이어지는 KK개의 통을 생각하자. 왼쪽 KK개의 통 각각을, 그 다음 KK개의 통 중 서로 다른(각각 자기보다 엄격히 큰) 통 안에 어떤 순서로든 넣을 수 있는 가장 큰 KK를 구하여라. K=0K = 0은 항상 가능하며, 2K2K는 NN을 넘을 수 없다.

입력

첫째 줄에 두 정수 MM과 NN이 주어진다 (1≤M≤10001 \le M \le 1000, 1≤N≤200001 \le N \le 20000). 각각 가장 큰 통의 크기와 통의 개수이다.

둘째 줄에 통의 크기 A1,A2,…,ANA_1, A_2, \dots, A_N이 왼쪽에서 오른쪽 순서로 주어진다 (1≤Ai≤M1 \le A_i \le M).

출력

왼쪽 KK개의 통을 각각 그 다음 KK개의 통 중 서로 다른, 자기보다 엄격히 큰 통 안에 넣을 수 있는 가장 큰 KK를 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    5 10
    2 2 1 4 3 2 5 4 2 3
    
    예상 출력
    4
    
  2. 예제 2

    입력
    5 4
    1 2 3 4
    
    예상 출력
    2