가환 함수

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

요약
주어진 순열 f에 대해 f와 교환 가능한 함수 g 중 사전순으로 가장 작은 값 리스트를 찾는 문제입니다.
난이도

보통10점 중 6점

유형
그래프, 그리디, 수학
정답자
아직 제출이 없습니다

문제

두 함수 ff와 gg (f,g:X→Xf, g : X \to X)가 가환이라는 것은 모든 x∈Xx \in X에 대해 f(g(x))=g(f(x))f(g(x)) = g(f(x))가 성립한다는 뜻이다. 예를 들어 f(x)=x+1f(x) = x + 1과 g(x)=x−2g(x) = x - 2는 가환이지만, f(x)=x+1f(x) = x + 1과 g(x)=2xg(x) = 2x는 가환이 아니다.

모든 함수 hh (h:Nn→Nnh : N_n \to N_n, 여기서 Nn={1,2,…,n}N_n = \{1, 2, \ldots, n\}이고 nn은 양의 정수)는 값 목록으로 나타낼 수 있다. 값 목록이란 ii번째 원소가 h(i)h(i)와 같은 목록이다. 예를 들어 N5N_5에서 N5N_5로 가는 함수 h(x)=⌈x/2⌉h(x) = \lceil x/2 \rceil의 값 목록은 [1,1,2,2,3][1, 1, 2, 2, 3]이다.

값 목록은 사전순으로 비교한다. 목록 [a1…an][a_1 \ldots a_n]이 목록 [b1…bn][b_1 \ldots b_n]보다 작다는 것은, 어떤 인덱스 kk가 존재하여 ak<bka_k < b_k이고 모든 인덱스 l<kl < k에 대해 al=bla_l = b_l인 경우를 말한다.

함수 ff (f:X→Xf : X \to X)가 전단사라는 것은 모든 y∈Xy \in X에 대해 f(x)=yf(x) = y를 만족하는 x∈Xx \in X가 정확히 하나 존재한다는 뜻이다.

전단사 함수 ff (f:Nn→Nnf : N_n \to N_n)가 주어질 때, ff와 가환이면서 값 목록이 사전순으로 가장 작은 함수 gg를 구하여라.

입력

첫째 줄에 전단사 함수 ff의 값 목록에 들어 있는 원소의 개수를 나타내는 정수 nn이 주어진다 (1≤n≤200 0001 \le n \le 200\,000).

둘째 줄에 ff의 값 목록이 주어진다. 이는 1,2,…,n1, 2, \ldots, n의 순열을 이루는 nn개의 정수이다.

출력

ff와 가환이면서 값 목록이 사전순으로 가장 작은 함수 gg의 값 목록을, nn개의 정수로 한 줄에 출력한다.

예제4

  1. 예제 1

    입력
    10
    1 2 3 4 5 6 7 8 9 10
    
    예상 출력
    1 1 1 1 1 1 1 1 1 1
    
  2. 예제 2

    입력
    10
    2 3 4 5 6 7 8 1 9 10
    
    예상 출력
    1 2 3 4 5 6 7 8 9 9
    
  3. 예제 3

    입력
    1
    1
    
    예상 출력
    1
    
  4. 예제 4

    입력
    2
    2 1
    
    예상 출력
    1 2