이진 힙 모양 트리에서 정해진 순서로 깨어나는 각 두더지를 남은 음식 용량이 있는 구멍에 배정해 총 이동 거리를 최소화하고, 각 접두사 k에 대한 최솟값을 구한다.
어려움9트리그리디동적 계획법시뮬레이션아직 제출이 없습니다시간 제한2초메모리 제한512 MB두더지는 굴 사이를 오가려고 터널을 판다. 이 문제에서 다루는 터널망은 굴 n개와 굴을 잇는 터널 n−1개로 이루어진다. 굴에는 1번부터 n번까지 번호를 붙인다. 1보다 큰 모든 i에 대해 i번 굴은 ⌊i/2⌋번 굴과 터널 하나로 이어져 있다. 터널은 양쪽 방향으로 모두 지날 수 있다.
굴 i에는 먹이가 ci만큼 있고, 이는 두더지 정확히 ci마리가 먹을 수 있는 양이다.
터널망에는 두더지 m마리가 산다. 두더지 i가 지금 자고 있는 굴의 번호는 pi다. 아침이 되면 앞에서부터 k마리가 깨어나 먹이를 찾고, 나머지 m−k마리는 계속 잔다. 깨어난 두더지는 각자 굴 하나를 골라 그 굴까지 기어간다. 두더지 한 마리의 이동 거리는 출발한 굴에서 도착한 굴까지 가면서 지나간 터널의 개수다. 깨어난 두더지는 영리해서 이동 거리의 합을 최소로 만든다.
이동이 모두 끝났을 때 굴 i에 있는 깨어난 두더지는 ci마리를 넘지 않아야 한다. 즉 깨어난 두더지는 모두 먹이를 먹어야 한다.
k=1부터 k=m까지 각각에 대해 이동 거리 합의 최솟값을 구하라. 깨어난 두더지가 모두 먹이를 먹는 방법은 항상 존재한다.
첫째 줄에 굴의 개수 n과 두더지의 수 m이 주어진다. (1≤n,m≤100000)
둘째 줄에 굴의 먹이 양 c1,c2,…,cn이 주어진다. (0≤ci≤m)
셋째 줄에 두더지가 자고 있는 굴의 번호 p1,p2,…,pm이 주어진다. (1≤pi≤n)
먹이의 총합 c1+c2+⋯+cn은 m 이상이다.
한 줄에 정수 m개를 공백 하나로 구분해 출력한다. k번째 수는 앞에서부터 k마리가 깨어났을 때 이동 거리 합의 최솟값이다.

그림의 점선 화살표는 이동 거리의 합이 최소가 되는 이동 방법 하나를 보여 준다. 굴 5개와 두더지 4마리가 있는 예제에서 k=2일 때 첫 번째 두더지는 2번 굴에서 5번 굴로 가고, 두 번째 두더지는 4번 굴에 그대로 머문다.