DOJ logoDOJ
题目
最近添加的题目收藏的题目Workbooks
分类DLC比赛小组团队讨论区
排名
解题数量排行榜连续解题排名DOJ Power 排行榜
评测状态
征题登录注册
DOJ logoDOJ

支持 OI 子任务计分、Elo 等级分和 Discord 认证的社区在线评测系统。

题目
题目列表分类
社区
比赛排名讨论区公告举办外部比赛指南
账号
登录注册评测状态
政策
服务条款DLC 使用规则隐私政策API 文档语言运行环境比赛排名奖励评级与表现
© 2026 DOJ
保留所有权利
题解

Binary Tree Queries

返回题目

题解

어떤 정점 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)