← Home
For problem statement at 0-999/400-499/440-449/446/problemA.txt this is a correct solution, but verifier at 0-999/400-499/440-449/446/verifierA.go ends with case 10: expected 3 got 4
input:
8
7 12 14 8 14 13 4 19
exit status 1 can you fix the verifier? ```go
package main

import "fmt"

func main() {
	var n int
	fmt.Scan(&n)
	a := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Scan(&a[i])
	}

	if n <= 2 {
		fmt.Println(n)
		return
	}

	// inc[i] = length of longest strictly increasing subsegment ending at i
	// dec[i] = length of longest strictly increasing subsegment starting at i
	inc := make([]int, n)
	dec := make([]int, n)

	inc[0] = 1
	for i := 1; i < n; i++ {
		if a[i] > a[i-1] {
			inc[i] = inc[i-1] + 1
		} else {
			inc[i] = 1
		}
	}

	dec[n-1] = 1
	for i := n - 2; i >= 0; i-- {
		if a[i+1] > a[i] {
			dec[i] = dec[i+1] + 1
		} else {
			dec[i] = 1
		}
	}

	ans := 2 // We can always change one element; at least length 2 if n>=2
	// But also consider just the longest increasing subsegment + 1 (change one neighbor)
	for i := 0; i < n; i++ {
		// Option 1: extend the increasing run ending at i by changing i+1
		val := inc[i] + 1
		if val > ans && val <= n {
			ans = val
		}
		// Option 2: extend the increasing run starting at i by changing i-1
		val = dec[i] + 1
		if val > ans && val <= n {
			ans = val
		}
	}

	// Option 3: merge two runs by changing position i
	// Change a[i] so that a[i-1] < a[i] < a[i+1], which requires a[i+1] - a[i-1] >= 2
	for i := 1; i < n-1; i++ {
		if a[i+1]-a[i-1] >= 2 {
			val := inc[i-1] + 1 + dec[i+1]
			if val > ans {
				ans = val
			}
		}
	}

	if ans > n {
		ans = n
	}

	fmt.Println(ans)
}
```