For problem statement at 0-999/500-599/560-569/568/problemE.txt this is a correct solution, but verifier at 0-999/500-599/560-569/568/verifierE.go ends with case 2 failed: expected "7" got "4"
exit status 1 can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
"sort"
)
type Node struct {
idx int32
val int32
prev int32
}
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var n int
if _, err := fmt.Fscan(in, &n); err != nil {
return
}
A := make([]int32, n)
for i := 0; i < n; i++ {
fmt.Fscan(in, &A[i])
}
var m int
fmt.Fscan(in, &m)
C := make([]int32, m)
for i := 0; i < m; i++ {
fmt.Fscan(in, &C[i])
}
sort.Slice(C, func(i, j int) bool { return C[i] > C[j] })
var uniqC []int32
if m > 0 {
uniqC = append(uniqC, C[0])
for i := 1; i < m; i++ {
if C[i] != C[i-1] {
uniqC = append(uniqC, C[i])
}
}
}
C = uniqC
nodes := make([]Node, 1, 10000000)
nodes[0] = Node{idx: -1, val: -1, prev: 0}
DP_val := make([]int32, 0, n)
DP_node := make([]int32, 0, n)
type Update struct {
pos int
val int32
prev int32
}
var updates []Update
for i := 0; i < n; i++ {
if A[i] != -1 {
v := A[i]
l, r := 0, len(DP_val)
for l < r {
mid := int(uint(l+r) >> 1)
if DP_val[mid] >= v {
r = mid
} else {
l = mid + 1
}
}
pos := l
var prev int32 = 0
if pos > 0 {
prev = DP_node[pos-1]
}
nodes = append(nodes, Node{idx: int32(i), val: v, prev: prev})
nid := int32(len(nodes) - 1)
if pos == len(DP_val) {
DP_val = append(DP_val, v)
DP_node = append(DP_node, nid)
} else {
DP_val[pos] = v
DP_node[pos] = nid
}
} else {
updates = updates[:0]
pos := len(DP_val)
for _, c := range C {
for pos > 0 && DP_val[pos-1] >= c {
pos--
}
if pos == len(DP_val) || c < DP_val[pos] {
var prev int32 = 0
if pos > 0 {
prev = DP_node[pos-1]
}
if len(updates) > 0 && updates[len(updates)-1].pos == pos {
updates[len(updates)-1] = Update{pos: pos, val: c, prev: prev}
} else {
updates = append(updates, Update{pos: pos, val: c, prev: prev})
}
}
}
for _, u := range updates {
if u.pos == len(DP_val) || u.val < DP_val[u.pos] {
nodes = append(nodes, Node{idx: int32(i), val: u.val, prev: u.prev})
nid := int32(len(nodes) - 1)
if u.pos == len(DP_val) {
DP_val = append(DP_val, u.val)
DP_node = append(DP_node, nid)
} else {
DP_val[u.pos] = u.val
DP_node[u.pos] = nid
}
}
}
}
}
if len(DP_node) > 0 {
curr := DP_node[len(DP_node)-1]
for curr != 0 {
node := nodes[curr]
if A[node.idx] == -1 {
A[node.idx] = node.val
}
curr = node.prev
}
}
cIdx := 0
for i := 0; i < n; i++ {
if A[i] == -1 {
A[i] = C[cIdx]
cIdx = (cIdx + 1) % len(C)
}
if i > 0 {
fmt.Fprint(out, " ")
}
fmt.Fprint(out, A[i])
}
fmt.Fprintln(out)
}
```