포럼
문제 USACO0645

중앙값 힙

설명

*참고: 이 문제의 시간 제한은 기본값의 두 배인 4초이다.*

농부 존은 노드가 \(N\)개인 이진 트리를 가지고 있다. 노드에는 \(1\)부터 \(N\)까지 번호가 매겨져 있다(\(1 \leq N < 2\cdot 10^5\)이고 \(N\)은 홀수). \(i>1\)에 대해 노드 \(i\)의 부모는 \(\lfloor i/2\rfloor\)이다. 각 노드는 초기 정수 값 \(a_i\)와, 초기 값을 다른 임의의 정수 값으로 바꾸는 데 드는 비용 \(c_i\)를 가진다(\(0\le a_i,c_i\le 10^9\)).

그는 연방 소 중개국(FBI)으로부터 이 트리 안에서 근사 중앙값을 찾는 임무를 받았고, 이를 위한 영리한 알고리즘을 고안했다.

그는 마지막 노드 \(N\)에서 시작하여 거꾸로 진행한다. 알고리즘의 매 단계에서, 어떤 노드가 자신과 두 자식 셋 중의 중앙값이 아니라면, 현재 노드의 값과 중앙값이 되는 자식의 값을 교환한다. 이 알고리즘이 끝났을 때 노드 \(1\)(루트)의 값이 중앙값 근사치이다.

FBI는 농부 존에게 각각 목표 값 \(m\)(\(0\le m\le 10^9\))으로 지정되는 \(Q\)개(\(1 \leq Q \leq 2\cdot 10^5\))의 독립적인 쿼리 목록도 주었다. 각 쿼리에서 농부 존은 먼저 일부 노드의 초기 값을 바꾼 뒤 중앙값 근사 알고리즘을 실행한다. 각 쿼리에 대해, 알고리즘의 출력이 \(m\)이 되도록 만들기 위해 농부 존이 지불해야 하는 총비용의 최솟값을 구하시오.

Problem credits: Suhas Nagar and Benjamin Qi

제약

배점

  • 입력 2-4: \(N,Q\le 50\)
  • 입력 5-7: \(N,Q\le 1000\)
  • 입력 8-16: 추가 제약이 없다

Problem credits: Suhas Nagar and Benjamin Qi

입력 형식

첫째 줄에 \(N\)이 주어진다.

다음 \(N\)개의 줄에 각각 두 정수 \(a_i\)\(c_i\)가 주어진다.

다음 줄에 \(Q\)가 주어진다.

다음 \(Q\)개의 줄에 각각 목표 값 \(m\)이 주어진다.

출력 형식

각 목표 값 \(m\)에 대한 총비용의 최솟값을 \(Q\)개의 줄에 출력한다.

예제 1
입력
5
10 10000
30 1000
20 100
50 10
40 1
11
55
50
45
40
35
30
25
20
15
10
5
출력
111
101
101
100
100
100
100
0
11
11
111
설명

To make the median approximation equal \(40\), FJ can change the value at node 3
to \(60\). This costs \(c_3=100\).

To make the median approximation equal \(45\), FJ can change the value at node 3
to \(60\) and the value at node 5 to \(45\). This costs \(c_3+c_5=100+1=101\).

문제 정보

riseoj 작성

출처 올림피아드 > USACO > 2024-2025 > January > Gold

태그

평가 및 의견

Median Heap

개요
출제자 난이도 Unrated 레이팅 미적용 의견 0 / 1 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

Median Heap

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8