버블 정렬
시간 제한2초메모리 제한1024 MB
구간 최솟값 조건을 모두 만족하는 음이 아닌 정수 수열 중 버블 정렬 교환 횟수가 가장 적은 값을 구합니다. 조건을 만족하는 수열이 없으면 -1을 출력합니다.
문제
최근 어린 Z는 버블 정렬에 강한 관심을 갖게 되었다.
버블 정렬의 의사코드는 다음과 같다.
입력: 길이가 n인 수열 a[1...n]
출력: 작은 수부터 큰 수 순으로 정렬된 결과
for i = 1 to n do:
for j = 1 to n - 1 do
if (a[j] > a[j + 1])
a[j]와 a[j + 1]의 값을 교환한다
버블 정렬의 교환 횟수는 정렬 중에 수행된 교환의 수이며, 위 의사코드에서 여섯 번째 줄이 실행되는 횟수와 같다. 그는 교환 횟수가 가능한 한 적은 수열을 찾고 싶어 한다.
어린 Z가 연구하는 수열은 음이 아닌 정수로 이루어진다. 수열의 길이는 이며, 다음 개의 조건을 만족해야 한다.
번째 조건: 인덱스가 부터 까지인 원소 의 최솟값이 정확히 이다.
버블 정렬은 시간 초과가 자주 난다. 그래서 그는 모든 조건을 만족하는 수열 중에서 버블 정렬의 교환 횟수가 최소가 되는 값을 알고 싶어 한다.
입력
여러 개의 데이터가 주어진다. 첫 줄에 양의 정수 가 주어진다. 각 데이터의 첫 줄에는 양의 정수 , 이 주어진다. 여기서 이다. 다음 개의 줄에는 음이 아닌 정수 , , 가 주어지며, , 을 만족한다.
출력
개의 줄에 정수를 한 줄에 하나씩 출력한다. 모든 조건을 만족하는 수열이 있으면, 그러한 수열들 중 버블 정렬의 교환 횟수 최솟값을 출력한다. 모든 조건을 만족하는 수열이 없으면 을 출력한다.
제한
모든 테스트 포인트는 다음을 만족한다: , , , . 여기서 과 은 모든 테스트 포인트의 과 의 합이다.
힌트
일부 테스트 포인트는 입력량이 많다. 빠른 입출력을 사용하는 것을 권장한다.