RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
KOI00055

주차 타워

Diamond V 다이아몬드 V
난이도
2s
시간 제한
1024MB
메모리 제한
1
맞았습니다!!
2
제출 수
50.0%
정답률
레이팅

의견: 0

설명

원형의 주차 타워가 있다. 주차 타워에는 \(N\)개의 칸이 원형으로 있다. 각 칸은 시계 방향으로 차례대로 \(1\)번째, \(2\)번째, \(\dots\), \(N\)번째 칸으로 부른다. 각 칸에는 차가 한 대씩 들어있다. \(i\)번째 칸에 있는 차는 번호 \(a_i\)를 가지고 있다.

주차 타워에는 두 개의 버튼이 있다. 버튼 A를 누르면 주차 타워를 시계방향으로, 버튼 B를 누르면 주차 타워를 반시계방향으로 한 칸 회전할 수 있다. 아래에 있는 왼쪽 그림은 위 예시에서 버튼 A를, 오른쪽 그림은 버튼 B를 누른 다음의 상태를 나타낸다.

이 때, 주차 타워에서 모든 차를 빼려 한다.

맨 아래에 있는 한 개의 칸에서만 차를 뺄 수 있다. 초기 상태에는 \(1\)번째 칸이 맨 아래에 있다. 맨 아래에 있지 않은 칸에 있는 차를 빼기 위해서는, 먼저 버튼을 적절히 눌러서 주차 타워를 회전해, 차가 있는 칸을 맨 아래로 옮겨야 한다.

추가적으로, 번호 \(x\)를 가진 차를 빼기 위해서는 먼저 번호가 \(x\)보다 작은 모든 차를 먼저 빼어야 한다. 즉, 주차 타워에 번호가 \(x\) 미만인 차가 남아 있다면, 번호가 \(x\)인 차를 뺄 수 없다.

주차 타워에서 모든 차를 빼기 위해, 버튼을 눌러야 하는 총 횟수의 최솟값을 구하는 프로그램을 작성하여라.

제약
  • \(1 \le N \le 100\,000\)
  • \(1 \le a_i \le 1\,000\,000\,000\)
입력 형식

첫 번째 줄에 정수 \(N\)이 주어진다.

두 번째 줄에 차들의 번호 \(a_1, \dots , a_N\)이 순서대로 공백을 사이에 두고 주어진다.

출력 형식

첫 번째 줄에 버튼을 눌러야 하는 총 횟수의 최솟값을 출력하라.

서브태스크
서브태스크점수설명

1

8점

\(a_i = 1\) (\(1 \le i \le N\)). 즉, 모든 자동차의 번호는 \(1\)이다.

2

9점

\(i \ne j\)일 때, \(a_i \ne a_j\). 즉, 모든 자동차의 번호가 다르다.

3

10점

\(N \le 10\).

4

21점

\(N \le 100\).

5

31점

\(N \le 1\,000\).

6

21점

추가 제약 조건 없음.

예제 1
입력
4
1 2 2 1
출력
3
예제 2
입력
5
3 1 4 5 1
출력
7
문제 정보

riseoj 작성

출처 올림피아드 > 한국정보올림피아드 > KOI 2022 > 2차 대회 > 중등부 3번

평가 및 의견

주차 타워

개요
출제자 난이도 Diamond V 다이아몬드 V 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

주차 타워

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8