← Home
For problem statement at 1000-1999/1400-1499/1430-1439/1431/problemF.txt this is a correct solution, but verifier at 1000-1999/1400-1499/1430-1439/1431/verifierF.go ends with All 62 tests passed. can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"os"
)

type MaxHeap struct {
	data []int
}

func (h *MaxHeap) Push(v int) {
	h.data = append(h.data, v)
	h.up(len(h.data) - 1)
}

func (h *MaxHeap) Pop() int {
	n := len(h.data) - 1
	h.data[0], h.data[n] = h.data[n], h.data[0]
	v := h.data[n]
	h.data = h.data[:n]
	h.down(0)
	return v
}

func (h *MaxHeap) up(j int) {
	for {
		i := (j - 1) / 2
		if i == j || h.data[i] >= h.data[j] {
			break
		}
		h.data[i], h.data[j] = h.data[j], h.data[i]
		j = i
	}
}

func (h *MaxHeap) down(i0 int) {
	i := i0
	n := len(h.data)
	for {
		j1 := 2*i + 1
		if j1 >= n || j1 < 0 {
			break
		}
		j := j1
		if j2 := j1 + 1; j2 < n && h.data[j2] > h.data[j1] {
			j = j2
		}
		if h.data[i] >= h.data[j] {
			break
		}
		h.data[i], h.data[j] = h.data[j], h.data[i]
		i = j
	}
}

func (h *MaxHeap) Clear() {
	h.data = h.data[:0]
}

func (h *MaxHeap) Len() int {
	return len(h.data)
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n, k, x int
	fmt.Fscan(reader, &n, &k, &x)

	a := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(reader, &a[i])
	}

	h := &MaxHeap{data: make([]int, 0, n)}

	check := func(S int64) bool {
		removed := 0
		var sum int64 = 0
		h.Clear()

		for i := 0; i < n; i++ {
			h.Push(a[i])
			sum += int64(a[i])
			for sum > S {
				maxVal := h.Pop()
				sum -= int64(maxVal)
				removed++
			}
			if h.Len() == x {
				h.Clear()
				sum = 0
			}
		}
		return removed <= k
	}

	var low, high int64 = 0, 100000000000000
	ans := high
	for low <= high {
		mid := low + (high-low)/2
		if check(mid) {
			ans = mid
			high = mid - 1
		} else {
			low = mid + 1
		}
	}
	fmt.Println(ans)
}