For problem statement at 0-999/100-199/140-149/145/problemE.txt this is a correct solution, but verifier at 0-999/100-199/140-149/145/verifierE.go ends with All tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
var (
c4 []int
c7 []int
n47 []int
n74 []int
lz []bool
s string
)
func max(a, b int) int {
if a > b {
return a
}
return b
}
func pushUp(v int) {
l, r := 2*v, 2*v+1
c4[v] = c4[l] + c4[r]
c7[v] = c7[l] + c7[r]
n47[v] = max(c4[l]+n47[r], n47[l]+c7[r])
n74[v] = max(c7[l]+n74[r], n74[l]+c4[r])
}
func apply(v int) {
c4[v], c7[v] = c7[v], c4[v]
n47[v], n74[v] = n74[v], n47[v]
lz[v] = !lz[v]
}
func pushDown(v int) {
if lz[v] {
apply(2 * v)
apply(2*v + 1)
lz[v] = false
}
}
func build(v, tl, tr int) {
if tl == tr {
if s[tl] == '4' {
c4[v] = 1
} else {
c7[v] = 1
}
n47[v] = 1
n74[v] = 1
return
}
tm := (tl + tr) / 2
build(2*v, tl, tm)
build(2*v+1, tm+1, tr)
pushUp(v)
}
func update(v, tl, tr, l, r int) {
if l > tr || r < tl {
return
}
if l <= tl && tr <= r {
apply(v)
return
}
pushDown(v)
tm := (tl + tr) / 2
update(2*v, tl, tm, l, r)
update(2*v+1, tm+1, tr, l, r)
pushUp(v)
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Buffer(make([]byte, 1024*1024), 10*1024*1024)
scanner.Split(bufio.ScanWords)
if !scanner.Scan() {
return
}
n, _ := strconv.Atoi(scanner.Text())
scanner.Scan()
m, _ := strconv.Atoi(scanner.Text())
scanner.Scan()
s = scanner.Text()
c4 = make([]int, 4*n+1)
c7 = make([]int, 4*n+1)
n47 = make([]int, 4*n+1)
n74 = make([]int, 4*n+1)
lz = make([]bool, 4*n+1)
build(1, 0, n-1)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
for i := 0; i < m; i++ {
scanner.Scan()
op := scanner.Text()
if op == "count" {
fmt.Fprintln(writer, n47[1])
} else {
scanner.Scan()
l, _ := strconv.Atoi(scanner.Text())
scanner.Scan()
r, _ := strconv.Atoi(scanner.Text())
update(1, 0, n-1, l-1, r-1)
}
}
}