수열 만들기

시간 제한2초메모리 제한512 MB

요약
2부터 N까지의 수를 주어진 규칙에 따라 원형 자리의 빈칸에 넣은 뒤, 1번 자리부터 읽은 최종 수열을 구한다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 이분 탐색, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

수열을 좋아하는 수민이는 11부터 NN까지의 정수로 수열을 만들려고 한다.

수열은 다음과 같은 규칙으로 만들려고 한다.

  1. 원형으로 NN개의 자리가 있고 11은 미리 하나의 자리에 채워 넣는다.
  2. 22부터 NN까지의 수를 차례로 3번~4번 과정을 반복하며 채워 넣는다.
  3. 이미 놓인 수 중 하나를 골라 p_ip\_i로 정하고 11 이상 10910^9 이하의 정수 중 하나를 골라 x_ix\_i로 정한다.
  4. p_ip\_i가 써진 자리를 기준으로, 시계방향으로 돌았을 때 x_ix\_i번째 등장하는 빈자리를 찾아 그 자리에 수를 쓴다.
  5. 11이 쓰인 자리부터 시계방향으로, 차례로 자리에 적힌 NN개의 수로 수열을 만든다.

입력

수열의 크기 정수 NN이 첫째 줄에 주어진다. (2≤N≤300,000)(2 \leq N \leq 300\\,000)

둘째 줄부터 NN째 줄까지 기준이 되는 정수 p_ip\_i와 이동해야 하는 칸 x_ix\_i가 ii번째 줄에 주어진다. (1≤p_i≤i−1(1 \leq p\_i \leq i - 1; 1≤x_i≤1091 \leq x\_i \leq 10^9)

즉, p_ip\_i가 적힌 자리로부터 시계방향으로 돌았을 때 x_ix\_i번째 등장하는 빈자리에 수 ii를 적는다는 의미이다.

출력

NN개의 줄에 걸쳐 ii번째 줄에 수열의 ii번째 수를 출력한다.

예제1

  1. 예제 1

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