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 mismatch on test 1
Input:
5
4
2 3 1 4
5
5 4 3 2 1
4
2 1 1 3
4
1 1 3 1
8
2 4 1 6 3 8 5 7
Expected: 3 3 3 4
5 5 5 5 5
2 2 2 3
1 1 3 3
8 8 8 8 8 8 8 8
Got: 2 3 1 4
5 4 3 2 1
2 1 1 3
1 1 3 1
2 4 1 6 3 8 5 7
exit status 1 can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
)
type FastScanner struct {
r *bufio.Reader
b []byte
}
func NewFastScanner() *FastScanner {
return &FastScanner{
r: bufio.NewReaderSize(os.Stdin, 1<<20),
b: make([]byte, 0, 64),
}
}
func (fs *FastScanner) NextInt() int {
sign := 1
val := 0
c, err := fs.r.ReadByte()
for (c < '0' || c > '9') && c != '-' {
if err != nil {
return 0
}
c, err = fs.r.ReadByte()
}
if c == '-' {
sign = -1
c, _ = fs.r.ReadByte()
}
for c >= '0' && c <= '9' {
val = val*10 + int(c-'0')
c, err = fs.r.ReadByte()
if err != nil {
break
}
}
if err == nil {
_ = fs.r.UnreadByte()
}
return sign * val
}
type BIT struct {
n int
f []int
}
func NewBIT(n int) *BIT {
return &BIT{n: n, f: make([]int, n+2)}
}
func (b *BIT) Reset() {
for i := range b.f {
b.f[i] = 0
}
}
func (b *BIT) Update(i, v int) {
for i <= b.n {
if v > b.f[i] {
b.f[i] = v
}
i += i & -i
}
}
func (b *BIT) Query(i int) int {
res := 0
for i > 0 {
if b.f[i] > res {
res = b.f[i]
}
i -= i & -i
}
return res
}
func reverse(a []int) {
for i, j := 0, len(a)-1; i < j; i, j = i+1, j-1 {
a[i], a[j] = a[j], a[i]
}
}
func main() {
in := NewFastScanner()
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
t := in.NextInt()
totalN := 0
ns := make([]int, t)
as := make([][]int, t)
maxA := 0
for tc := 0; tc < t; tc++ {
n := in.NextInt()
ns[tc] = n
totalN += n
a := make([]int, n+1)
for i := 1; i <= n; i++ {
a[i] = in.NextInt()
if a[i] > maxA {
maxA = a[i]
}
}
as[tc] = a
}
bit := NewBIT(maxA + 2)
for tc := 0; tc < t; tc++ {
n := ns[tc]
a := as[tc]
f := make([]int, n+1)
g := make([]int, n+1)
bit.Reset()
for i := 1; i <= n; i++ {
ai := a[i]
bestSmaller := bit.Query(ai - 1)
if bestSmaller < ai {
bestSmaller = ai
}
f[i] = bestSmaller
bit.Update(ai, f[i])
}
bit.Reset()
for i := n; i >= 1; i-- {
ai := a[i]
bestSmaller := bit.Query(ai - 1)
if bestSmaller < ai {
bestSmaller = ai
}
g[i] = bestSmaller
bit.Update(ai, g[i])
}
ans := make([]int, n+1)
for i := 1; i <= n; i++ {
if f[i] > g[i] {
ans[i] = f[i]
} else {
ans[i] = g[i]
}
}
for i := 1; i <= n; i++ {
if i > 1 {
fmt.Fprint(out, " ")
}
fmt.Fprint(out, ans[i])
}
if tc+1 < t {
fmt.Fprintln(out)
}
}
}
```