아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Chodzenie po linie

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

요약
순열 p가 주어질 때 (i,0)에서 (p_i,1)로 가는 선분들을 생각하고, 두 선분이 교차하면 이동할 수 있다. 각 시작 선에 대해 모든 목표 선까지 필요한 최소 이동 횟수의 합을 구한다. 도달할 수 없으면 합에 포함하지 않는다.
난이도

보통10점 중 7점

유형
그래프, BFS, 정렬, 구현
정답자
아직 제출이 없습니다

문제

Bajtazar jest światowej sławy cyrkowcem, który specjalizuje się w chodzeniu po naciągniętych linach oraz przechodzeniu między nimi. Podczas jego słynnego triku pod sufitem namiotu cyrkowego rozciągniętych jest n lin. Jeśli spojrzymy na plan namiotu od góry i nałożymy na niego układ współrzędnych, to i-ta z lin (dla i = 1, 2, . . . , n) rozciągnięta jest od punktu (i, 0) do (pi, 1), gdzie ciąg p1, p2, . . . , pn jest permutacją liczb od 1 do n.

Bajtazar rozpoczyna trik stojąc na jednej z lin i prosi publikę o podanie mu numeru jakiejś liny. Jego celem jest doprowadzić do stanięcia na niej. Bajtazar jest bardzo wprawny w przemieszczaniu się po linach, jednak przechodzenie z jednej na drugą jest dość skomplikowane. Ponieważ jest bardzo odważny, ale nie głupi, to może on przejść z jednej liny na drugą tylko jeśli odpowiadające im odcinki się przecinają. Wszystkie liny zawieszone są na podobnej wysokości, więc taki manewr zawsze się udaje, jednak jest dość męczący. Z tego względu Bajtazar wybiera trasę, która minimalizuje liczbę przejść pomiędzy różnymi linami. Wyjątkiem jest sytuacja, w której dotarcie do docelowej liny w opisany sposób nie jest możliwe – wtedy Bajtazar grzecznie dziękuje za występ i wraca za kulisy, przez co nie wykonuje żadnego przejścia.

Bajtazar nie jest jednak pewien, od której liny powinien tym razem rozpocząć swój występ. Dla każdej z nich chciałby poznać sumę minimalnych liczb przejść, które musi wykonać, po wszystkich możliwych wyborach publiki. Pomóż mu i napisz program, który obliczy te wartości.

입력

W pierwszym wierszu standardowego wejścia znajduje się jedna liczba całkowita n (1 ≤ n ≤ 200 000), oznaczająca liczbę lin rozciągniętych w cyrkowym namiocie.

W drugim wierszu znajduje się n liczb całkowitych p1, p2, . . . , pn (1 ≤ pi ≤ n; dla i ≠ j zachodzi pi ≠ pj), opisanych w treści zadania.

출력

W jedynym wierszu wyjścia powinno znaleźć się n liczb całkowitych, gdzie i-ta z nich powinna być równa sumie po minimalnych liczbach przejść, które będzie musiał wykonać Bajtazar zależnie od numeru liny podanego przez publikę, zakładając że zacznie na i-tej linie.

힌트

Wyjaśnienie przykładu: Rozciągnięte w teście przykładowym liny wyglądają następująco:

Minimalną liczbę przejść pomiędzy nimi prezentuje poniższa tabelka, gdzie numer rzędu odpowiada numerowi startowej liny, a numer kolumny odpowiada numerowi liny podanemu przez publikę. Liczby na wyjściu programu powinny być równe sumom wartości w kolejnych rzędach:

예제1

  1. 예제 1

    입력
    7
    2 1 4 7 3 6 5
    
    예상 출력
    1 1 9 5 6 7 7