For problem statement at 1000-1999/1600-1699/1630-1639/1635/problemF.txt this is a correct solution, but verifier at 1000-1999/1600-1699/1630-1639/1635/verifierF.go ends with All tests passed can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
"sort"
)
const INF = 4000000000000000000
type Pair struct {
u, v int
w int64
}
type Query struct {
l, r, id int
}
var (
n, q int
x []int
w []int
st [][]int
logs []int
pairs []Pair
tree []int64
sz int
)
func minIdx(i, j int) int {
if w[i] < w[j] {
return i
}
if w[j] < w[i] {
return j
}
return i
}
func queryMinIdx(L, R int) int {
j := logs[R-L+1]
return minIdx(st[j][L], st[j][R-(1<<j)+1])
}
func buildST() {
logs = make([]int, n+1)
logs[1] = 0
for i := 2; i <= n; i++ {
logs[i] = logs[i/2] + 1
}
K := logs[n] + 1
st = make([][]int, K)
for i := range st {
st[i] = make([]int, n)
}
for i := 0; i < n; i++ {
st[0][i] = i
}
for j := 1; j < K; j++ {
length := 1 << (j - 1)
for i := 0; i+2*length <= n; i++ {
st[j][i] = minIdx(st[j-1][i], st[j-1][i+length])
}
}
}
func solveRecursive(l, r int) {
if l >= r {
return
}
m := queryMinIdx(l, r)
xm := int64(x[m])
wm := int64(w[m])
mw := int64(INF)
for i := m - 1; i >= l; i-- {
wi := int64(w[i])
if wi < mw {
pairs = append(pairs, Pair{i, m, (xm - int64(x[i])) * (wm + wi)})
mw = wi
}
}
mw = int64(INF)
for i := m + 1; i <= r; i++ {
wi := int64(w[i])
if wi < mw {
pairs = append(pairs, Pair{m, i, (int64(x[i]) - xm) * (wm + wi)})
mw = wi
}
}
solveRecursive(l, m-1)
solveRecursive(m+1, r)
}
func update(p int, value int64) {
p += sz
if value < tree[p] {
tree[p] = value
for p > 1 {
tree[p>>1] = min64(tree[p], tree[p^1])
p >>= 1
}
}
}
func query(l, r int) int64 {
res := int64(INF)
for l, r = l+sz, r+sz; l < r; l, r = l>>1, r>>1 {
if l&1 == 1 {
res = min64(res, tree[l])
l++
}
if r&1 == 1 {
r--
res = min64(res, tree[r])
}
}
return res
}
func min64(a, b int64) int64 {
if a < b {
return a
}
return b
}
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
fmt.Fscan(reader, &n, &q)
x = make([]int, n)
w = make([]int, n)
for i := 0; i < n; i++ {
fmt.Fscan(reader, &x[i], &w[i])
}
buildST()
pairs = make([]Pair, 0, n*20)
solveRecursive(0, n-1)
queries := make([]Query, q)
for i := 0; i < q; i++ {
var l, r int
fmt.Fscan(reader, &l, &r)
queries[i] = Query{l - 1, r - 1, i}
}
sort.Slice(queries, func(i, j int) bool {
return queries[i].r < queries[j].r
})
sort.Slice(pairs, func(i, j int) bool {
return pairs[i].v < pairs[j].v
})
ans := make([]int64, q)
sz = 1
for sz < n {
sz *= 2
}
tree = make([]int64, 2*sz)
for i := range tree {
tree[i] = INF
}
pIdx := 0
for _, qry := range queries {
for pIdx < len(pairs) && pairs[pIdx].v <= qry.r {
update(pairs[pIdx].u, pairs[pIdx].w)
pIdx++
}
ans[qry.id] = query(qry.l, qry.r+1)
}
for _, v := range ans {
fmt.Fprintln(writer, v)
}
}
```