DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

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)