For problem statement at 0-999/500-599/500-509/501/problemE.txt this is a correct solution, but verifier at 0-999/500-599/500-509/501/verifierE.go ends with All tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
var (
B []int
neg_count int
a []int
n int
)
func addB(x int, delta int) {
if B[x] < 0 {
neg_count--
}
B[x] += delta
if B[x] < 0 {
neg_count++
}
}
func addRight(j int, l int, r_prev int) {
k := n - j + 1
addB(a[j], 1)
if k >= l && k <= r_prev {
addB(a[j], 1)
} else if k < l || k > j {
addB(a[k], -1)
}
}
func removeLeft(j int, l_prev int, r int) {
k := n - j + 1
addB(a[j], -1)
if k >= j+1 && k <= r {
addB(a[j], -1)
} else if k < l_prev || k > r {
addB(a[k], 1)
}
}
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Fscan(reader, &n)
a = make([]int, n+1)
freq := make([]int, n+1)
for i := 1; i <= n; i++ {
fmt.Fscan(reader, &a[i])
freq[a[i]]++
}
odd_count := 0
for _, f := range freq {
if f%2 != 0 {
odd_count++
}
}
if odd_count > 1 {
fmt.Println(0)
return
}
L_bad := n + 1
R_bad := 0
for i := 1; i <= n/2; i++ {
if a[i] != a[n-i+1] {
if i < L_bad {
L_bad = i
}
if i > R_bad {
R_bad = i
}
}
}
B = make([]int, n+1)
neg_count = 0
ans := int64(0)
r := 1
addRight(1, 1, 0)
for l := 1; l <= n; l++ {
if R_bad > 0 && l > n-R_bad+1 {
break
}
if r < l {
r++
addRight(r, l, r-1)
}
for r < R_bad {
r++
addRight(r, l, r-1)
}
if R_bad > 0 && l > L_bad {
for r < n-L_bad+1 {
r++
addRight(r, l, r-1)
}
}
for r <= n && neg_count > 0 {
r++
if r <= n {
addRight(r, l, r-1)
}
}
if r > n {
break
}
ans += int64(n - r + 1)
removeLeft(l, l, r)
}
fmt.Println(ans)
}