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

버블버블

Platinum II 플래티넘 II
난이도
2s
시간 제한
512MB
메모리 제한
1
맞았습니다!!
4
제출 수
25.0%
정답률
레이팅

의견: 0

설명

여러분은 \(N\)개의 정수 \(A\)\(1\), · · · , \(A\)\(N\)을 버블 정렬(bubble sort)를 이용하여 단조증가하도록 (감소하지 않는 순서가 되도록) 정렬하려고 한다. 주어진 정수들 중에는 같은 값이 있을 수 있다. 버블 정렬은 인접한 두 수를 교환하는 것만으로 정렬을 수행한다. 버블 정렬을 수행하는 동안 인접한 두 수를 몇 번 교환해야 하는지도 셀 수 있다. 예를 들어, 세 수 \(3\), \(2\), \(1\)이 주어졌다면, 첫 단계에서는 인접한 두 수를 교환하는 일을 두 번 해서 \(2\), \(1\), \(3\)을 만들고, 다음 단계에서는 \(2\)\(1\)을 교환해서 \(1\), \(2\), \(3\)을 만든다. 총 \(3\)번의 교환이 필요하다.

이제 이를 약간 변형한 문제를 풀어보자. 주어진 \(N\)개의 수 중 정확하게 한 개의 수를 다른 임의의 수로 바꿀 수 있다. 처음 주어진 수들은 모두 정수였지만, 바뀐 수는 실수의 어떤 값으로든 될 수 있다. 이렇게 하나의 수를 바꾼 다음, \(N\)개의 수를 단조증가하도록 버블 정렬을 수행할 때 교환 횟수가 최소가 되게 하려고 한다.

물론, 어떤 수를 바꾸느냐에 따라 필요한 최소 교환 횟수는 달라질 수 있다. 예를 들어, 위의 예 \(3\), \(2\), \(1\)에서 맨 마지막 수를 \(4\)로 바꾸면 (실제로는 \(3\) 이상인 어떤 수도 가능하다) 단 한 번 \(3\)\(2\)를 바꾸어서 오름차순으로 정렬된 \(2\), \(3\), \(4\)를 얻을 수 있다. 한편, 두 번째 수인 \(2\)를 바꾸는 경우 어떤 수로 바꾸더라도 최소한 두 번 교환을 해야 한다는 것을 알 수 있다.

\(1\) 이상 \(N\) 이하의 모든 \(i\)에 대해, \(A\)\(i\)를 바꾸었을 때 버블 정렬의 최소 교환 횟수를 모두 구하는 프로그램을 작성하라.

제약
  • \(1 ≤ N ≤ 300\ 000\)
  • \(1 ≤ A_1, · · · , A_N ≤ 1\ 000\ 000\)
입력 형식

첫 번째 줄에 \(N\)이 주어진다. 두 번째 줄에 \(N\)개의 정렬할 수 \(A\)\(1\), \(A\)\(2\), · · · , \(A\)\(N\)이 공백 하나를 사이로 두고 주어진다. 이 수들은 모두 정수이다.

출력 형식

첫 번째 줄에 문제의 정답을 출력한다. \(i\)번째로 출력해야 할 수는, \(A\)\(i\)를 아무 실수로 바꿀 수 있을 때 \(N\)개의 수를 단조증가하도록 버블 정렬하기 위해 필요한 최소 교환 횟수이다.

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

1

6점

\(N ≤ 200, A_1, · · · , A_N ≤ 200.\)

2

13점

\(N ≤ 3,000, A_1, · · · , A_N ≤ 3,000.\)

3

21점

\(N ≤ 15,000, A_1, · · · , A_N ≤ 15,000.\)

4

60점

추가 제약 조건 없음.

예제 1
입력
3
3 2 1
출력
1 2 1
예제 2
입력
5
6 6 8 5 8
출력
2 3 3 0 3
문제 정보

riseoj 작성

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

평가 및 의견

버블버블

개요
출제자 난이도 Platinum II 플래티넘 II 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

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

풀이 제출

버블버블

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