Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Nov 1, 2025

🧷 문제 링크

https://www.acmicpc.net/problem/16587

🧭 풀이 시간

30분

👀 체감 난이도

✏️ 문제 설명

$N$명의 사람으로 이루어진 트리 구조의 회사가 있다. 보스를 제외한 모든 직원은 직속 상사가 존재한다. 각 사람은 $1$이상 $10^9$ 이하의 나이를 가진다.

$Q$개의 쿼리를 처리해보자.

  • $a$ $b$ $l$ $r$ : $a$번 직원과 $b$번 직원을 잇는 경로 상에서, 나이가 $l$이상 $r$이하인 직원들의 나이의 합 출력하기

🔍 풀이 방법

$a$$b$를 잇는 경로 상에서 나이가 $x$ 미만인 직원들의 나이 합을 $f(a, b, x)$로 정한다.
그러면, 쿼리 $a$ $b$ $l$ $r$의 답은 $f(a, b, r+1) - f(a, b, l)$이 된다.

update하는 부분이 없으니까 쿼리를 처리하는 순서는 아무렇게나 해도 상관 없고 답만 구하면 장땡이다. -> 오프라인 쿼리
모든 직원의 나이를 일단 0이라 가정해놓고, 적은 나이를 요구하는 쿼리부터 처리하면서 직원들의 나이를 점점 추가해 간다.

트리에서의 효율적인 경로 쿼리 처리를 위해 heavy-light 분할을,
거기서 구간 합을 빠르게 구해야 하니까 세그먼트 트리를 사용했다.

⏳ 회고

ez

@oncsr oncsr added the success 👍 해설을 보지 않고 풀었을 때 label Nov 1, 2025
@ShinHeeEul ShinHeeEul merged commit 734b93d into main Nov 1, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

success 👍 해설을 보지 않고 풀었을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants