페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#8333
서브태스크

자동 반죽 기계 5s 2048MB

문제

정올 베이커리는 자동 반죽 기계를 이용해 손님이 요청하는 크기의 빵을 직접 구워주는 시연회를 준비하고 있다.
각 반죽 기계는 설정된 반죽 크기만큼 정확히 반죽하여 빵을 구운다.

새로운 반죽 기계의 초기 반죽 크기 설정값은 1이다.
그리고 기계는 시연 중에 원할 때마다 설정값을 더 큰 값으로 조정할 수 있지만, 절대로 줄일 수는 없다.


시연회는 총 N명의 손님이 차례로 방문하며, 각 손님은 원하는 빵의 크기 Aᵢ를 요청한다.
각 요청에 대해 베이커리는 다음 세 가지 중 하나를 선택할 수 있다:

  1. 기존 기계 하나의 반죽 크기 설정값을 Aᵢ로 올려서 빵을 구워준다.

    • 이 경우, 반죽 크기 설정은 늘릴 수는 있지만 줄일 수 없기에 해당 기계의 현재 설정값이 Aᵢ 이하여야 한다.

  2. 새로운 기계를 추가로 구입하고, 그 기계의 설정값을 Aᵢ로 설정하여 빵을 구워준다.

  3. 요청을 거절한다.

    • 단, 두 번 연속으로 요청을 거절하면 손님들이 화를 내고 시연회는 실패하게 된다.


정올 베이커리의 시연회를 당담하게 된 당신은 N명의 손님 요청 A₁, A₂, ..., A_N이 주어졌을 때,
시연회를 실패시키지 않으면서 사용해야 하는 반죽 기계의 최소 개수를 구해야 한다.


입력

첫 번째 줄에 정수 N (2 ≤ N ≤ 5,000,000)이 주어진다.

두 번째 줄에 N개의 정수 A₁, A₂, …, A_N (1 ≤ Aᵢ ≤ 21)이 공백으로 구분되어 주어진다.

[제약사항]

  • 2 ≤ N ≤ 5\ 000\ 000

  • 1 ≤ A_i \le 21 ( 1 ≤ i ≤ N )

  • 주어진 값은 모두 정수다.


출력

첫 줄에 시연회를 실패시키지 않으면서 사용해야 하는 반죽 기계의 최소 개수를 출력한다.


부분문제

번호 점수 조건
#110점

N ≤ 15

#26점

N ≤ 500, Aᵢ ≤ 2 (1 ≤ i ≤ N)

#312점

N ≤ 500, Aᵢ ≤ 5 (1 ≤ i ≤ N)

#418점

N ≤ 500, Aᵢ ≤ 15 (1 ≤ i ≤ N)

#526점

N ≤ 500,000, Aᵢ ≤ 15 (1 ≤ i ≤ N)

#610점

N ≤ 500,000

#718점

추가 제약 조건 없음


예제 #1

5
5 3 4 2 1
2

첫 번째 요청(5): 거절 (무시 1회)

두 번째 요청(3): 기존 기계 설정값을 3으로 업그레이드

세 번째 요청(4): 같은 기계를 4로 업그레이드

네 번째 요청(2): 새 기계를 2로 설정

다섯 번째 요청(1): 거절 (이전 요청은 처리했으므로 연속 아님 → OK)

총 2개의 기계로 시연회 완료 가능.


예제 #2

6
2 1 1 2 2 1
1

첫 번째 요청(2): 거절 (무시 1회)

두 번째 요청(1): 기계 초기 설정값이 1이기에 그대로 사용

세 번째 요청(1): 기계 초기 설정값이 1이기에 그대로 사용

네 번째 요청(2): 같은 기계를 2로 업그레이드

다섯 번째 요청(2): 기계 설정값이 2이기에 그대로 사용

여섯 번째 요청(1): 거절 (이전 요청은 처리했으므로 연속 아님 → OK)

총 1개의 기계로 시연회 완료 가능.


예제 #3

12
3 2 3 3 1 2 2 1 2 3 2 2
2

예제 #4

12
4 5 1 3 5 2 1 3 3 1 2 2
3


출처

JOI 2025

로그인해야 코드를 작성할 수 있어요.