만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Paimon 정렬

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

요약
주어진 수열의 각 접두사 A_k에 대해 Sort 함수가 수행하는 swap 횟수를 구합니다.
난이도

보통10점 중 6점

유형
배열, 정렬, 수학
정답자
아직 제출이 없습니다

문제

Paimon은 버블 정렬과 비슷하지만 몇 가지 차이가 있는 새로운 정렬 알고리즘을 방금 만들었다. 이 알고리즘은 길이 nn인 1부터 시작하는 인덱스의 수열 AA를 입력받아 정렬한다. 의사 코드는 다음과 같다.

함수 1: 정렬 알고리즘

1. function Sort(A)
2.     for i ← 1 to n do // n은 A의 원소 개수이다
3.         for j ← 1 to n do
4.             if a_i < a_j then // a_i는 A의 i번째 원소이다
5.                 a_i와 a_j를 교환한다

이 알고리즘이 수열을 정렬한다고 믿기 어렵다면 직접 증명해 보라. 그것도 과제에 포함된다.

길이 nn인 정수 수열 A=a1,a2,⋯ ,anA = a_1, a_2, \cdots, a_n이 주어진다. 각 1≤k≤n1 \le k \le n에 대해 길이 kk인 접두사 Ak=a1,a2,⋯ ,akA_k = a_1, a_2, \cdots, a_k를 구하고, SORT(AkA_k)를 호출할 때 수행되는 swap의 횟수를 구하라.

입력

여러 개의 테스트 케이스가 주어진다. 첫 줄에 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스는 다음과 같다.

첫 줄에 수열의 길이 nn (1≤n≤1051 \le n \le 10^5)이 주어진다.

둘째 줄에 수열 a1,a2,⋯ ,ana_1, a_2, \cdots, a_n (1≤ai≤n1 \le a_i \le n)이 주어진다.

모든 테스트 케이스의 nn을 합친 값은 10610^6을 넘지 않는다.

출력

각 테스트 케이스마다 nn개의 정수 s1,s2,⋯ ,sns_1, s_2, \cdots, s_n을 공백으로 구분하여 한 줄에 출력한다. sis_i는 SORT(AiA_i)를 호출할 때 수행되는 swap의 횟수이다.

예제1

  1. 예제 1

    입력
    3
    5
    2 3 2 1 5
    3
    1 2 3
    1
    1
    
    예상 출력
    0 2 3 5 7
    0 2 4
    0