← Home
For problem statement at 0-999/100-199/150-159/150/problemC.txt this is a correct solution, but verifier at 0-999/100-199/150-159/150/verifierC.go ends with case 1 failed: expected 0.000000000000 got 0.000
input:
6 2 10
0 6 11 21 24 28 
1 93 7 53 25 
4 5
4 5
exit status 1 can you fix the verifier? package main

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

type Node struct {
	min   int64
	max   int64
	best  int64
	valid bool
}

func combine(a, b Node) Node {
	if !a.valid {
		return b
	}
	if !b.valid {
		return a
	}
	best := a.best
	if b.best > best {
		best = b.best
	}
	cross := b.max - a.min
	if cross > best {
		best = cross
	}
	minv := a.min
	if b.min < minv {
		minv = b.min
	}
	maxv := a.max
	if b.max > maxv {
		maxv = b.max
	}
	return Node{min: minv, max: maxv, best: best, valid: true}
}

var data []byte
var ptr int

func nextInt() int {
	n := len(data)
	for ptr < n && (data[ptr] < '0' || data[ptr] > '9') {
		ptr++
	}
	val := 0
	for ptr < n && data[ptr] >= '0' && data[ptr] <= '9' {
		val = val*10 + int(data[ptr]-'0')
		ptr++
	}
	return val
}

func main() {
	data, _ = io.ReadAll(os.Stdin)

	n := nextInt()
	m := nextInt()
	c := int64(nextInt())

	x := make([]int64, n)
	for i := 0; i < n; i++ {
		x[i] = int64(nextInt())
	}

	pref := make([]int64, n)
	for i := 1; i < n; i++ {
		pref[i] = pref[i-1] + int64(nextInt())
	}

	t := make([]int64, n)
	for i := 0; i < n; i++ {
		t[i] = 100*x[i] - 2*c*pref[i]
	}

	size := 1
	for size < n {
		size <<= 1
	}
	tree := make([]Node, size<<1)
	for i := 0; i < n; i++ {
		tree[size+i] = Node{min: t[i], max: t[i], best: 0, valid: true}
	}
	for i := size - 1; i >= 1; i-- {
		tree[i] = combine(tree[i<<1], tree[i<<1|1])
	}

	query := func(l, r int) Node {
		l += size
		r += size
		var left, right Node
		for l < r {
			if l&1 == 1 {
				left = combine(left, tree[l])
				l++
			}
			if r&1 == 1 {
				r--
				right = combine(tree[r], right)
			}
			l >>= 1
			r >>= 1
		}
		return combine(left, right)
	}

	var sum int64
	for i := 0; i < m; i++ {
		a := nextInt()
		b := nextInt()
		res := query(a-1, b)
		sum += res.best
	}

	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	fmt.Fprintf(out, "%d.%03d\n", sum/200, (sum%200)*5)
	out.Flush()
}