자동 반죽 기계 서브태스크 5초 2048MB
문제
정올 베이커리는 자동 반죽 기계를 이용해 손님이 요청하는 크기의 빵을 직접 구워주는 시연회를 준비하고 있다.
각 반죽 기계는 설정된 반죽 크기만큼 정확히 반죽하여 빵을 구운다.
새로운 반죽 기계의 초기 반죽 크기 설정값은 1이다.
그리고 기계는 시연 중에 원할 때마다 설정값을 더 큰 값으로 조정할 수 있지만, 절대로 줄일 수는 없다.
시연회는 총
각 요청에 대해 베이커리는 다음 세 가지 중 하나를 선택할 수 있다:
기존 기계 하나의 반죽 크기 설정값을
Aᵢ 로 올려서 빵을 구워준다.이 경우, 반죽 크기 설정은 늘릴 수는 있지만 줄일 수 없기에 해당 기계의 현재 설정값이
Aᵢ 이하여야 한다.
새로운 기계를 추가로 구입하고, 그 기계의 설정값을 Aᵢ로 설정하여 빵을 구워준다.
요청을 거절한다.
단, 두 번 연속으로 요청을 거절하면 손님들이 화를 내고 시연회는 실패하게 된다.
정올 베이커리의 시연회를 당담하게 된 당신은
시연회를 실패시키지 않으면서 사용해야 하는 반죽 기계의 최소 개수를 구해야 한다.
입력
첫 번째 줄에 정수
두 번째 줄에
[제약사항]
2 ≤ N ≤ 5\ 000\ 000 1 ≤ A_i \le 21 (1 ≤ i ≤ N )주어진 값은 모두 정수다.
출력
첫 줄에 시연회를 실패시키지 않으면서 사용해야 하는 반죽 기계의 최소 개수를 출력한다.
부분문제
| 번호 | 점수 | 조건 |
|---|---|---|
| #1 | 10점 | N ≤ 15 |
| #2 | 6점 | N ≤ 500, Aᵢ ≤ 2 (1 ≤ i ≤ N) |
| #3 | 12점 | N ≤ 500, Aᵢ ≤ 5 (1 ≤ i ≤ N) |
| #4 | 18점 | N ≤ 500, Aᵢ ≤ 15 (1 ≤ i ≤ N) |
| #5 | 26점 | N ≤ 500,000, Aᵢ ≤ 15 (1 ≤ i ≤ N) |
| #6 | 10점 | N ≤ 500,000 |
| #7 | 18점 | 추가 제약 조건 없음 |
예제 #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