For problem statement at 2000-2999/2000-2099/2030-2039/2031/problemD.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2030-2039/2031/verifierD.go ends with All 40 tests passed. can you fix the verifier? package main
import (
"io"
"os"
"strconv"
)
type FastScanner struct {
data []byte
idx int
n int
}
func NewFastScanner() *FastScanner {
data, _ := io.ReadAll(os.Stdin)
return &FastScanner{data: data, n: len(data)}
}
func (fs *FastScanner) NextInt() int {
for fs.idx < fs.n {
c := fs.data[fs.idx]
if c >= '0' && c <= '9' {
break
}
fs.idx++
}
val := 0
for fs.idx < fs.n {
c := fs.data[fs.idx]
if c < '0' || c > '9' {
break
}
val = val*10 + int(c-'0')
fs.idx++
}
return val
}
func main() {
fs := NewFastScanner()
t := fs.NextInt()
out := make([]byte, 0, 1<<20)
for ; t > 0; t-- {
n := fs.NextInt()
a := make([]int, n)
for i := 0; i < n; i++ {
a[i] = fs.NextInt()
}
sufMin := make([]int, n)
sufMin[n-1] = a[n-1]
for i := n - 2; i >= 0; i-- {
if a[i] < sufMin[i+1] {
sufMin[i] = a[i]
} else {
sufMin[i] = sufMin[i+1]
}
}
ans := make([]int, n)
start := 0
curMax := a[0]
for i := 0; i < n-1; i++ {
if a[i] > curMax {
curMax = a[i]
}
if curMax <= sufMin[i+1] {
for j := start; j <= i; j++ {
ans[j] = curMax
}
start = i + 1
curMax = a[start]
}
}
if a[n-1] > curMax {
curMax = a[n-1]
}
for j := start; j < n; j++ {
ans[j] = curMax
}
for i := 0; i < n; i++ {
out = strconv.AppendInt(out, int64(ans[i]), 10)
if i+1 < n {
out = append(out, ' ')
} else {
out = append(out, '\n')
}
}
}
os.Stdout.Write(out)
}