두더지 굴

이진 힙 모양 트리에서 정해진 순서로 깨어나는 각 두더지를 남은 음식 용량이 있는 구멍에 배정해 총 이동 거리를 최소화하고, 각 접두사 k에 대한 최솟값을 구한다.

어려움9트리그리디동적 계획법시뮬레이션아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

두더지는 굴 사이를 오가려고 터널을 판다. 이 문제에서 다루는 터널망은 굴 nn개와 굴을 잇는 터널 n1n-1개로 이루어진다. 굴에는 11번부터 nn번까지 번호를 붙인다. 11보다 큰 모든 ii에 대해 ii번 굴은 i/2\lfloor i/2 \rfloor번 굴과 터널 하나로 이어져 있다. 터널은 양쪽 방향으로 모두 지날 수 있다.

ii에는 먹이가 cic_i만큼 있고, 이는 두더지 정확히 cic_i마리가 먹을 수 있는 양이다.

터널망에는 두더지 mm마리가 산다. 두더지 ii가 지금 자고 있는 굴의 번호는 pip_i다. 아침이 되면 앞에서부터 kk마리가 깨어나 먹이를 찾고, 나머지 mkm-k마리는 계속 잔다. 깨어난 두더지는 각자 굴 하나를 골라 그 굴까지 기어간다. 두더지 한 마리의 이동 거리는 출발한 굴에서 도착한 굴까지 가면서 지나간 터널의 개수다. 깨어난 두더지는 영리해서 이동 거리의 합을 최소로 만든다.

이동이 모두 끝났을 때 굴 ii에 있는 깨어난 두더지는 cic_i마리를 넘지 않아야 한다. 즉 깨어난 두더지는 모두 먹이를 먹어야 한다.

k=1k = 1부터 k=mk = m까지 각각에 대해 이동 거리 합의 최솟값을 구하라. 깨어난 두더지가 모두 먹이를 먹는 방법은 항상 존재한다.

입력

첫째 줄에 굴의 개수 nn과 두더지의 수 mm이 주어진다. (1n,m1000001 \le n, m \le 100\,000)

둘째 줄에 굴의 먹이 양 c1,c2,,cnc_1, c_2, \dots, c_n이 주어진다. (0cim0 \le c_i \le m)

셋째 줄에 두더지가 자고 있는 굴의 번호 p1,p2,,pmp_1, p_2, \dots, p_m이 주어진다. (1pin1 \le p_i \le n)

먹이의 총합 c1+c2++cnc_1 + c_2 + \dots + c_nmm 이상이다.

출력

한 줄에 정수 mm개를 공백 하나로 구분해 출력한다. kk번째 수는 앞에서부터 kk마리가 깨어났을 때 이동 거리 합의 최솟값이다.

노트

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