← Home
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)
}