| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | package mainimport (	"container/heap"	"fmt")type pair struct {	_1 int	_2 int}type maxHeap []pairfunc (h maxHeap) Len() int           { return len(h) }func (h maxHeap) Less(i, j int) bool { return h[j]._1 < h[i]._1 }func (h maxHeap) Swap(i, j int)      { h[i], h[j] = h[j], h[i] }func (h *maxHeap) Push(x interface{}) {	*h = append(*h, x.(pair))}func (h *maxHeap) Pop() interface{} {	l := len(*h)	x := (*h)[l-1]	*h = (*h)[:l-1]	return x}func main() {	var n, m int	fmt.Scan(&n, &m)	nums := make([]int, n)	l, r := make([]int, n), make([]int, n)	var h maxHeap	for i := 0; i < n; i++ {		fmt.Scan(&nums[i])		heap.Push(&h, pair{nums[i], i})		l[i] = (i + n - 1) % n		r[i] = (i + 1) % n	}	sum := 0	for i := 0; i < m; i++ {		p := heap.Pop(&h).(pair)		for l[p._2] == -1 {			p = heap.Pop(&h).(pair)		}		sum += p._1		left, right := l[p._2], r[p._2]		l[p._2], r[p._2] = l[left], r[right]		l[left], l[right] = -1, -1 // Mark element as used		np := pair{nums[left] + nums[right] - p._1, p._2}		heap.Push(&h, np)	}	fmt.Println(sum)}
 |