For problem statement at 1000-1999/1800-1899/1880-1889/1883/problemD.txt this is a correct solution, but verifier at 1000-1999/1800-1899/1880-1889/1883/verifierD.go ends with All tests passed can you fix the verifier? package main
import (
"io"
"os"
"strings"
)
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) skipSpaces() {
for fs.idx < fs.n {
c := fs.data[fs.idx]
if c == ' ' || c == '\n' || c == '\r' || c == '\t' {
fs.idx++
} else {
break
}
}
}
func (fs *FastScanner) nextInt() int {
fs.skipSpaces()
v := 0
for fs.idx < fs.n {
c := fs.data[fs.idx]
if c < '0' || c > '9' {
break
}
v = v*10 + int(c-'0')
fs.idx++
}
return v
}
func (fs *FastScanner) nextOp() byte {
fs.skipSpaces()
c := fs.data[fs.idx]
fs.idx++
return c
}
func (fs *FastScanner) peek() byte {
fs.skipSpaces()
if fs.idx < fs.n {
return fs.data[fs.idx]
}
return 0
}
type MaxHeap struct {
a []int
}
func (h *MaxHeap) Push(x int) {
h.a = append(h.a, x)
i := len(h.a) - 1
for i > 0 {
p := (i - 1) / 2
if h.a[p] >= x {
break
}
h.a[i] = h.a[p]
i = p
}
h.a[i] = x
}
func (h *MaxHeap) Pop() int {
a := h.a
n := len(a) - 1
res := a[0]
if n == 0 {
h.a = a[:0]
return res
}
x := a[n]
a = a[:n]
i := 0
for {
l := i*2 + 1
if l >= n {
break
}
r := l + 1
c := l
if r < n && a[r] > a[l] {
c = r
}
if a[c] <= x {
break
}
a[i] = a[c]
i = c
}
a[i] = x
h.a = a
return res
}
func (h *MaxHeap) Top() int {
return h.a[0]
}
type MinHeap struct {
a []int
}
func (h *MinHeap) Push(x int) {
h.a = append(h.a, x)
i := len(h.a) - 1
for i > 0 {
p := (i - 1) / 2
if h.a[p] <= x {
break
}
h.a[i] = h.a[p]
i = p
}
h.a[i] = x
}
func (h *MinHeap) Pop() int {
a := h.a
n := len(a) - 1
res := a[0]
if n == 0 {
h.a = a[:0]
return res
}
x := a[n]
a = a[:n]
i := 0
for {
l := i*2 + 1
if l >= n {
break
}
r := l + 1
c := l
if r < n && a[r] < a[l] {
c = r
}
if a[c] >= x {
break
}
a[i] = a[c]
i = c
}
a[i] = x
h.a = a
return res
}
func (h *MinHeap) Top() int {
return h.a[0]
}
func processCase(fs *FastScanner, out *strings.Builder, q int) {
cntL := make(map[int]int, q*2)
cntR := make(map[int]int, q*2)
var left MaxHeap
var right MinHeap
for i := 0; i < q; i++ {
op := fs.nextOp()
l := fs.nextInt()
r := fs.nextInt()
if op == '+' {
cntL[l]++
cntR[r]++
left.Push(l)
right.Push(r)
} else {
cntL[l]--
cntR[r]--
}
for len(left.a) > 0 && cntL[left.Top()] == 0 {
left.Pop()
}
for len(right.a) > 0 && cntR[right.Top()] == 0 {
right.Pop()
}
if len(left.a) > 0 && len(right.a) > 0 && left.Top() > right.Top() {
out.WriteString("YES\n")
} else {
out.WriteString("NO\n")
}
}
}
func main() {
fs := NewFastScanner()
var out strings.Builder
first := fs.nextInt()
if c := fs.peek(); c == '+' || c == '-' {
processCase(fs, &out, first)
} else {
t := first
for ; t > 0; t-- {
q := fs.nextInt()
processCase(fs, &out, q)
}
}
os.Stdout.WriteString(out.String())
}