← Home
For problem statement at 0-999/800-899/860-869/862/problemE.txt this is a correct solution, but verifier at 0-999/800-899/860-869/862/verifierE.go ends with Passed 101/101 tests can you fix the verifier? package main

import (
	"bufio"
	"io"
	"os"
	"sort"
	"strconv"
)

type FastScanner struct {
	data []byte
	idx  int
	n    int
}

func NewFastScanner() *FastScanner {
	data, _ := io.ReadAll(os.Stdin)
	return &FastScanner{data: data, n: len(data)}
}

func (fs *FastScanner) NextInt64() int64 {
	for fs.idx < fs.n {
		c := fs.data[fs.idx]
		if c != ' ' && c != '\n' && c != '\r' && c != '\t' {
			break
		}
		fs.idx++
	}
	sign := int64(1)
	if fs.data[fs.idx] == '-' {
		sign = -1
		fs.idx++
	}
	var val int64
	for fs.idx < fs.n {
		c := fs.data[fs.idx]
		if c < '0' || c > '9' {
			break
		}
		val = val*10 + int64(c-'0')
		fs.idx++
	}
	return val * sign
}

func abs64(x int64) int64 {
	if x < 0 {
		return -x
	}
	return x
}

func best(arr []int64, target int64) int64 {
	i := sort.Search(len(arr), func(i int) bool { return arr[i] >= target })
	ans := int64(1 << 62)
	if i < len(arr) {
		d := abs64(arr[i] - target)
		if d < ans {
			ans = d
		}
	}
	if i > 0 {
		d := abs64(arr[i-1] - target)
		if d < ans {
			ans = d
		}
	}
	return ans
}

func main() {
	fs := NewFastScanner()
	n := int(fs.NextInt64())
	m := int(fs.NextInt64())
	q := int(fs.NextInt64())

	var cur int64
	for i := 1; i <= n; i++ {
		x := fs.NextInt64()
		if i&1 == 1 {
			cur += x
		} else {
			cur -= x
		}
	}

	pref := make([]int64, m+1)
	for i := 1; i <= m; i++ {
		x := fs.NextInt64()
		if i&1 == 1 {
			pref[i] = pref[i-1] + x
		} else {
			pref[i] = pref[i-1] - x
		}
	}

	vals := make([]int64, m-n+1)
	for j := 0; j <= m-n; j++ {
		s := pref[j+n] - pref[j]
		if j&1 == 1 {
			s = -s
		}
		vals[j] = s
	}
	sort.Slice(vals, func(i, j int) bool { return vals[i] < vals[j] })

	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	out.WriteString(strconv.FormatInt(best(vals, cur), 10))
	out.WriteByte('\n')

	for ; q > 0; q-- {
		l := int(fs.NextInt64())
		r := int(fs.NextInt64())
		x := fs.NextInt64()
		if ((r - l + 1) & 1) == 1 {
			if l&1 == 1 {
				cur += x
			} else {
				cur -= x
			}
		}
		out.WriteString(strconv.FormatInt(best(vals, cur), 10))
		out.WriteByte('\n')
	}

	out.Flush()
}