← Home
For problem statement at 0-999/600-699/600-609/601/problemB.txt this is a correct solution, but verifier at 0-999/600-699/600-609/601/verifierB.go ends with All tests passed can you fix the verifier? ```go
package main

import (
	"bufio"
	"io"
	"os"
	"strconv"
)

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0
	nextInt := func() int {
		for idx < len(data) && (data[idx] < '0' || data[idx] > '9') && data[idx] != '-' {
			idx++
		}
		sign := 1
		if data[idx] == '-' {
			sign = -1
			idx++
		}
		val := 0
		for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
			val = val*10 + int(data[idx]-'0')
			idx++
		}
		return sign * val
	}

	n := nextInt()
	q := nextInt()

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

	b := make([]int64, n-1)
	for i := 0; i < n-1; i++ {
		d := a[i+1] - a[i]
		if d < 0 {
			d = -d
		}
		b[i] = d
	}

	prev := make([]int, n-1)
	next := make([]int, n-1)
	stack := make([]int, 0, n-1)

	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	for ; q > 0; q-- {
		l := nextInt() - 1
		r := nextInt() - 1
		m := r - l

		stack = stack[:0]
		for i := 0; i < m; i++ {
			v := b[l+i]
			for len(stack) > 0 && b[l+stack[len(stack)-1]] <= v {
				stack = stack[:len(stack)-1]
			}
			if len(stack) == 0 {
				prev[i] = -1
			} else {
				prev[i] = stack[len(stack)-1]
			}
			stack = append(stack, i)
		}

		stack = stack[:0]
		for i := m - 1; i >= 0; i-- {
			v := b[l+i]
			for len(stack) > 0 && b[l+stack[len(stack)-1]] < v {
				stack = stack[:len(stack)-1]
			}
			if len(stack) == 0 {
				next[i] = m
			} else {
				next[i] = stack[len(stack)-1]
			}
			stack = append(stack, i)
		}

		var ans int64
		for i := 0; i < m; i++ {
			ans += b[l+i] * int64(i-prev[i]) * int64(next[i]-i)
		}

		out.WriteString(strconv.FormatInt(ans, 10))
		out.WriteByte('\n')
	}
}
```