DOJ logoDOJ
문제
최근 추가된 문제들저장한 문제
카테고리DLC대회그룹팀게시판
랭킹
문제 풀이 랭킹스트릭 랭킹DOJ Power 랭킹
현황
문제 제안로그인회원가입
DOJ logoDOJ

OI 서브태스크 채점, Elo 레이팅, Discord 인증을 갖춘 커뮤니티 온라인 저지.

문제
문제 목록카테고리
커뮤니티
대회랭킹게시판공지사항외부 대회 개최이용 안내
계정
로그인회원가입채점 현황
정책
이용약관DLC 이용 규칙개인정보 처리방침API 사용 설명서언어별 채점 환경대회 순위 보상레이팅과 퍼포먼스
© 2026 DOJ
모든 권리 보유
해설

이진 트리 쿼리

문제로 돌아가기

해설

어떤 정점 vvv를 루트로 정하면, vvv의 모든 이웃은 vvv의 자식이 된다. 따라서 차수가 333 이상인 정점을 루트로 정하면 이진 트리가 될 수 없다.

어떤 정점을 루트로 정해도 이진 트리라는 조건으로부터 모든 정점의 차수는 222 이하이다. 연결된 트리에서 모든 정점의 차수가 222 이하이면 트리는 하나의 경로이다.

경로의 한쪽 끝점부터 정점을 순서대로 나열한다. 정점 vvv의 위치를 PvP_vPv​라 하자. 현재 루트의 위치를 RRR, 쿼리에서 주어진 정점 iii의 위치를 PPP라 하자.

흰색 정점의 개수를 관리하는 Fenwick tree를 경로 순서 위에 만든다. S(x)S(x)S(x)를 경로의 첫 번째 정점부터 xxx번째 정점까지의 흰색 정점 수라고 하자.

P<RP<RP<R이면 현재 루트는 iii의 오른쪽에 있다. 따라서 iii의 서브트리는 구간 [1,P][1,P][1,P]이고, iii부터 루트까지의 경로는 구간 이다.

a=S(P),b=S(R)−S(P−1)a=S(P),\qquad b=S(R)-S(P-1)a=S(P),b=S(R)−S(P−1)

P>RP>RP>R이면 현재 루트는 iii의 왼쪽에 있다. 따라서 iii의 서브트리는 구간 [P,N][P,N][P,N]이고, iii부터 루트까지의 경로는 구간 이다.

a=S(N)−S(P−1),b=S(P)−S(R−1)a=S(N)-S(P-1),\qquad b=S(P)-S(R-1)a=S(N)−S(P−1),b=S(P)−

P=RP=RP=R이면 iii가 현재 루트이다. 이때 서브트리는 전체 트리이고, 경로에는 iii만 포함된다.

a=S(N),b=Cia=S(N),\qquad b=C_ia=S(N),b=Ci​

1번 쿼리는 현재 루트의 위치만 바꾸면 된다. 2번 쿼리는 Fenwick tree의 한 위치에 111 또는 −1-1−1을 더한다. 3번 쿼리는 위 식을 이용해 구간 합을 계산한다.

경로 순서를 구하는 데 O(N)O(N)O(N), Fenwick tree를 만드는 데 O(Nlog⁡N)O(N\log N)O(NlogN)이 걸린다. 각 쿼리는 O(log⁡N)O(\log N)O(logN)에 처리되므로 전체 시간 복잡도는 O((N+Q)이고, 공간 복잡도는 이다.

Solution written by GPT5.6

[P,R][P,R]
[P,R]
[R,P][R,P]
[R,P]
S(R−
1)
log⁡N)O((N+Q)\log N)
O((N+Q)logN)
O(N)O(N)O(N)