최적의 토너먼트
시간 제한5초메모리 제한512 MB
주어진 실력을 가진 N명의 참가자를 높이가 K 이하인 토너먼트 대진표의 리프에 배치해 모든 경기의 실력 차 합을 최소로 만든다.
문제
매년 열리는 프로그래밍 대회의 대진표를 짜려고 한다. 올해 대회에는 참가자 명이 나오고, 대회는 토너먼트 방식으로 치른다.
토너먼트는 잎 노드가 개인 이진 트리로 나타내고, 참가자를 잎 노드에 한 명씩 배정한다. 한 경기에서는 두 참가자가 맞붙어서 이긴 쪽이 다음 라운드로 올라가고 진 쪽은 탈락한다. 끝까지 살아남은 한 명이 우승자이고, 결승전은 트리의 루트 노드에 대응한다.
참가자 의 실력은 정수 이다. 두 참가자가 맞붙으면 실력이 더 큰 쪽이 항상 이긴다. 실력이 같으면 승자는 무작위로 정해진다.
지난 대회에서는 한쪽으로 크게 기운 경기가 너무 많아 지루하다는 불만이 있었다. 그래서 경기의 지루함과 토너먼트의 지루함을 다음과 같이 정한다. 실력이 인 참가자와 실력이 인 참가자가 맞붙는 경기의 지루함은 두 실력의 차이 이다. 토너먼트의 지루함은 트리에 있는 모든 경기의 지루함을 더한 값이다.
토너먼트의 높이가 이하이기만 하면 균형이 맞지 않는 모양을 포함해 어떤 모양이든 쓸 수 있다. 토너먼트의 높이는 루트 노드에서 잎 노드까지 이어지는 단순 경로에 놓인 경기 수의 최댓값이다.
지루함의 최솟값을 구하는 프로그램을 작성하라.

그림 1. 첫 번째 예제에서 만들 수 있는 토너먼트 두 가지. 왼쪽은 높이가 2이고 오른쪽은 높이가 3이다.
입력
입력은 테스트 케이스 하나로 이루어지고, 형식은 다음과 같다.
N K
A_1 A_2 ... A_N
첫째 줄에 정수 과 가 주어진다. (, ) 가 보장된다.
둘째 줄에 참가자의 실력 이 주어진다. ()
출력
높이가 이하인 토너먼트 중에서 지루함이 가장 작은 값을 출력한다.