For problem statement at 1000-1999/1100-1199/1150-1159/1156/problemE.txt this is a correct solution, but verifier at 1000-1999/1100-1199/1150-1159/1156/verifierE.go ends with All 100 tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var n int
if _, err := fmt.Fscan(reader, &n); err != nil {
return
}
p := make([]int, n+1)
pos := make([]int, n+1)
for i := 1; i <= n; i++ {
fmt.Fscan(reader, &p[i])
pos[p[i]] = i
}
L := make([]int, n+1)
R := make([]int, n+1)
stack := make([]int, 0, n)
for i := 1; i <= n; i++ {
for len(stack) > 0 && p[stack[len(stack)-1]] < p[i] {
stack = stack[:len(stack)-1]
}
if len(stack) > 0 {
L[i] = stack[len(stack)-1]
} else {
L[i] = 0
}
stack = append(stack, i)
}
stack = stack[:0]
for i := n; i >= 1; i-- {
for len(stack) > 0 && p[stack[len(stack)-1]] < p[i] {
stack = stack[:len(stack)-1]
}
if len(stack) > 0 {
R[i] = stack[len(stack)-1]
} else {
R[i] = n + 1
}
stack = append(stack, i)
}
ans := int64(0)
for i := 1; i <= n; i++ {
lenL := i - L[i] - 1
lenR := R[i] - i - 1
if lenL < lenR {
for l := L[i] + 1; l < i; l++ {
req := p[i] - p[l]
if req > 0 && req <= n {
r := pos[req]
if r > i && r < R[i] {
ans++
}
}
}
} else {
for r := i + 1; r < R[i]; r++ {
req := p[i] - p[r]
if req > 0 && req <= n {
l := pos[req]
if l > L[i] && l < i {
ans++
}
}
}
}
}
fmt.Println(ans)
}