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

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

트리와 쿼리 109{10}^{9}

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

요약
부모 간선을 끊고 다른 정점에 잇는 갱신을 처리하면서 두 정점 사이 단순 경로 위 정점 번호의 합을 구한다.
난이도

보통10점 중 7점

유형
트리, 유니온 파인드, 연결 리스트
정답자
아직 제출이 없습니다

문제

루트의 번호가 11이고 정점의 개수가 무한한 포화 이진 트리가 있다. 이 트리에서 ii번 정점의 왼쪽 자식은 2i2i, 오른쪽 자식은 2i+12i+1번 정점이며, 서로 양방향으로 연결되어 있다. 이 트리에 QQ개의 쿼리를 수행해 보자.

쿼리의 종류는 다음과 같다.

  • 1 a b: bb번 정점과 그 부모를 잇는 간선을 제거하고, aa번 정점과 bb번 정점을 잇는 간선을 추가한다. 단, ⌊log⁡_2a⌋<⌊log⁡_2b⌋ \lfloor \log\_{2}{a} \rfloor < \lfloor \log\_{2}{b} \rfloor를 만족하는 경우만 주어진다.
  • 2 c d: cc번 정점에서 dd번 정점으로 가는 단순 경로상에 존재하는 모든 정점의 번호의 합을 출력한다.

1번 쿼리를 수행한 후에도 항상 트리의 조건을 만족함을 증명할 수 있다. 2번 쿼리는 최소 한 번 이상 주어진다.

입력

첫 번째 줄에 쿼리의 개수를 나타내는 정수 QQ가 주어진다. (1≤Q≤50,000)(1 \le Q \le 50\\,000)

두 번째 줄부터 QQ개의 줄에 걸쳐 쿼리가 주어진다. (1≤a,b,c,d≤109)(1 \le a,b,c,d \le {10}^{9})

출력

2번 쿼리가 주어질 때마다 그 결과를 한 줄에 하나씩 출력한다.

힌트

⌊x⌋\lfloor x \rfloor는 xx와 같거나 그보다 작은 정수 중 가장 큰 정수이다.

예제1

  1. 예제 1

    입력
    5
    1 2 6
    2 6 7
    1 2 10
    2 14 10
    2 13 3
    
    예상 출력
    19
    37
    25