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()
}