← Home
For problem statement at 1000-1999/1900-1999/1910-1919/1919/problemF1.txt this is a correct solution, but verifier at 1000-1999/1900-1999/1910-1919/1919/verifierF1.go ends with reference failed on case 1: runtime error: exec: "refF1.bin": executable file not found in $PATH

exit status 1 can you fix the verifier? ```go
package main

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

type Node struct {
	w int64
	b int64
	c int64
	k int64
}

func merge(left, right Node) Node {
	var res Node
	res.w = left.w + right.w
	res.b = left.b + right.b

	// C_new = min(max(0, C_L - B_R), C_R)
	term := left.c - right.b
	if term < 0 {
		term = 0
	}
	if term < right.c {
		res.c = term
	} else {
		res.c = right.c
	}

	// K_new = K_L + min(C_L, K_R)
	m := left.c
	if m > right.k {
		m = right.k
	}
	res.k = left.k + m

	return res
}

var (
	a  []int64
	b  []int64
	c  []int64
	tr []Node
)

func build(p, l, r int) {
	if l == r {
		// Leaf node
		w0 := a[l]
		if w0 > b[l] {
			w0 = b[l]
		}
		bVal := b[l] - a[l]
		kVal := bVal
		if kVal < 0 {
			kVal = 0
		}
		cVal := c[l]
		tr[p] = Node{w: w0, b: bVal, c: cVal, k: kVal}
		return
	}
	mid := (l + r) >> 1
	build(p<<1, l, mid)
	build(p<<1|1, mid+1, r)
	tr[p] = merge(tr[p<<1], tr[p<<1|1])
}

func update(p, l, r, idx int) {
	if l == r {
		w0 := a[l]
		if w0 > b[l] {
			w0 = b[l]
		}
		bVal := b[l] - a[l]
		kVal := bVal
		if kVal < 0 {
			kVal = 0
		}
		cVal := c[l]
		tr[p] = Node{w: w0, b: bVal, c: cVal, k: kVal}
		return
	}
	mid := (l + r) >> 1
	if idx <= mid {
		update(p<<1, l, mid, idx)
	} else {
		update(p<<1|1, mid+1, r, idx)
	}
	tr[p] = merge(tr[p<<1], tr[p<<1|1])
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var n, q int
	fmt.Fscan(in, &n, &q)

	a = make([]int64, n+1)
	b = make([]int64, n+1)
	c = make([]int64, n+1)

	for i := 1; i <= n; i++ {
		fmt.Fscan(in, &a[i])
	}
	for i := 1; i <= n; i++ {
		fmt.Fscan(in, &b[i])
	}
	for i := 1; i <= n-1; i++ {
		fmt.Fscan(in, &c[i])
	}

	tr = make([]Node, 4*(n+2))
	build(1, 1, n)

	for i := 0; i < q; i++ {
		var p int
		var x, y, z int64
		fmt.Fscan(in, &p, &x, &y, &z)
		a[p] = x
		b[p] = y
		if p < n {
			c[p] = z
		}
		update(1, 1, n, p)
		fmt.Fprintln(out, tr[1].w)
	}
}
```