만드는 중입니다

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

완전 이진 트리와 쿼리

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

요약
정점이 N개인 완전 이진 트리에서 루트를 바꾸며, 현재 루트 기준으로 정점 v 서브트리에 있는 번호의 합을 구합니다.
난이도

보통10점 중 5점

유형
수학, 트리, 구현
정답자
아직 제출이 없습니다

문제

NN개의 정점을 가진 완전 이진 트리가 있다. 처음에는 11번 정점이 루트이다. 11번 정점을 제외한 모든 정점 xx에 대해, xx번 정점의 부모는 ⌊x2⌋\lfloor \frac x2 \rfloor번 정점이다.

이 트리에 대해 다음 쿼리를 처리한다.

  • 1 v: 트리의 루트를 vv번 정점으로 바꾼다.
  • 2 v: 현재 트리에서 vv번 정점을 루트로 하는 서브트리에 속한 모든 정점 번호의 합을 출력한다.

입력

첫 번째 줄에 NN, QQ가 공백으로 구분되어 주어진다. (1≤N≤1 000 000 0001 \le N \le 1\,000\,000\,000; 1≤Q≤50 0001 \le Q \le 50\,000)

이어서 QQ개의 줄에 각 쿼리가 주어진다. 2번 쿼리는 최소 하나 이상 주어진다. (1≤v≤N1 \le v \le N)

출력

2번 쿼리가 입력될 때마다 쿼리의 답을 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    10 5
    2 3
    2 5
    1 8
    2 4
    2 1
    
    예상 출력
    16
    15
    47
    17