Ultra-QuickSort

면접 대비

시간 제한1초메모리 제한256 MB

요약
서로 다른 정수로 이루어진 수열이 주어질 때, 오름차순으로 정렬하는 데 필요한 인접 교환의 최솟값, 즉 역전의 개수를 구한다.
난이도

보통10점 중 6점

유형
분할 정복, 정렬, 이분 탐색, 배열
정답자
아직 제출이 없습니다

문제

이 문제에서는 특정한 정렬 알고리즘을 분석해야 합니다. 이 알고리즘은 서로 다른 정수 nn개로 이루어진 수열을, 인접한 두 원소를 교환(swap)하는 연산만 반복하여 오름차순으로 정렬합니다. 예를 들어 수열 9, 1, 0, 5, 4는 0, 1, 4, 5, 9로 정렬됩니다.

주어진 입력 수열을 오름차순으로 정렬하기 위해 Ultra-QuickSort가 수행해야 하는 교환 연산의 최소 횟수를 구하세요.

입력

입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스의 첫 줄에는 입력 수열의 길이를 나타내는 정수 nn (n<500,000n < 500{,}000)이 주어집니다. 이어지는 nn개의 줄에는 각각 수열의 ii번째 원소 aia_i (0≤ai≤999,999,9990 \le a_i \le 999{,}999{,}999)가 한 줄에 하나씩 주어집니다. 한 테스트 케이스 안의 정수들은 모두 서로 다릅니다. 입력은 길이가 n=0n = 0인 수열로 끝나며, 이 수열은 처리하지 않습니다.

출력

각 입력 수열에 대해, 그 수열을 오름차순으로 정렬하는 데 필요한 교환 연산의 최소 횟수 opop를 한 줄에 하나씩 출력합니다.

예제2

  1. 예제 1

    입력
    5
    9
    1
    0
    5
    4
    3
    1
    2
    3
    0
    
    예상 출력
    6
    0
    
  2. 예제 2

    입력
    1
    42
    0
    
    예상 출력
    0