For problem statement at 1000-1999/1900-1999/1990-1999/1991/problemF.txt this is a correct solution, but verifier at 1000-1999/1900-1999/1990-1999/1991/verifierF.go ends with All tests passed can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
)
const K = 50
type Node struct {
val [K]int64
sz int
}
var (
n, q int
a []int64
tree []Node
)
func merge(left, right Node) Node {
var res Node
i, j := 0, 0
for res.sz < K && i < left.sz && j < right.sz {
if left.val[i] < right.val[j] {
res.val[res.sz] = left.val[i]
i++
} else {
res.val[res.sz] = right.val[j]
j++
}
res.sz++
}
for res.sz < K && i < left.sz {
res.val[res.sz] = left.val[i]
i++
res.sz++
}
for res.sz < K && j < right.sz {
res.val[res.sz] = right.val[j]
j++
res.sz++
}
return res
}
func build(node, l, r int) {
if l == r {
tree[node].val[0] = a[l]
tree[node].sz = 1
return
}
mid := (l + r) >> 1
build(node<<1, l, mid)
build(node<<1|1, mid+1, r)
tree[node] = merge(tree[node<<1], tree[node<<1|1])
}
func query(node, l, r, ql, qr int) Node {
if ql <= l && r <= qr {
return tree[node]
}
mid := (l + r) >> 1
if qr <= mid {
return query(node<<1, l, mid, ql, qr)
}
if ql > mid {
return query(node<<1|1, mid+1, r, ql, qr)
}
left := query(node<<1, l, mid, ql, qr)
right := query(node<<1|1, mid+1, r, ql, qr)
return merge(left, right)
}
func isTri(a, b, c int64) bool {
return a+b > c
}
func canFormTwo(b [K]int64, idx []int) bool {
v := [6]int64{}
for i := 0; i < 6; i++ {
v[i] = b[idx[i]]
}
if isTri(v[0], v[1], v[2]) && isTri(v[3], v[4], v[5]) {
return true
}
if isTri(v[0], v[1], v[3]) && isTri(v[2], v[4], v[5]) {
return true
}
if isTri(v[0], v[1], v[4]) && isTri(v[2], v[3], v[5]) {
return true
}
if isTri(v[0], v[1], v[5]) && isTri(v[2], v[3], v[4]) {
return true
}
if isTri(v[0], v[2], v[3]) && isTri(v[1], v[4], v[5]) {
return true
}
if isTri(v[0], v[2], v[4]) && isTri(v[1], v[3], v[5]) {
return true
}
if isTri(v[0], v[2], v[5]) && isTri(v[1], v[3], v[4]) {
return true
}
if isTri(v[0], v[3], v[4]) && isTri(v[1], v[2], v[5]) {
return true
}
if isTri(v[0], v[3], v[5]) && isTri(v[1], v[2], v[4]) {
return true
}
if isTri(v[0], v[4], v[5]) && isTri(v[1], v[2], v[3]) {
return true
}
return false
}
func check(node Node) bool {
k := node.sz
if k < 6 {
return false
}
if k <= 12 {
idx := make([]int, 6)
var dfs func(pos, start int) bool
dfs = func(pos, start int) bool {
if pos == 6 {
return canFormTwo(node.val, idx)
}
for i := start; i < k; i++ {
idx[pos] = i
if dfs(pos+1, i+1) {
return true
}
}
return false
}
return dfs(0, 0)
}
good := make([]bool, k)
for i := 0; i <= k-3; i++ {
if node.val[i]+node.val[i+1] > node.val[i+2] {
good[i] = true
}
}
for i := 0; i <= k-3; i++ {
if good[i] {
for j := i + 3; j <= k-3; j++ {
if good[j] {
return true
}
}
}
}
return false
}
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
fmt.Fscan(reader, &n, &q)
a = make([]int64, n)
for i := 0; i < n; i++ {
fmt.Fscan(reader, &a[i])
}
tree = make([]Node, 4*n)
build(1, 0, n-1)
for i := 0; i < q; i++ {
var l, r int
fmt.Fscan(reader, &l, &r)
l--
r--
node := query(1, 0, n-1, l, r)
if check(node) {
fmt.Fprintln(writer, "YES")
} else {
fmt.Fprintln(writer, "NO")
}
}
}
```