← Home
For problem statement at 1000-1999/1500-1599/1520-1529/1520/problemF2.txt this is a correct solution, but verifier at 1000-1999/1500-1599/1520-1529/1520/verifierF2.go ends with All tests passed can you fix the verifier? ```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

var (
	in   = bufio.NewReader(os.Stdin)
	out  = bufio.NewWriter(os.Stdout)
	memo []int
)

func main() {
	defer out.Flush()

	var n, t int
	fmt.Fscan(in, &n, &t)

	// Max size for segment tree is 4*n
	memo = make([]int, 4*n+1)
	for i := range memo {
		memo[i] = -1
	}

	for i := 0; i < t; i++ {
		var k int
		fmt.Fscan(in, &k)
		pos := solve(1, 1, n, k)
		fmt.Fprintf(out, "! %d\n", pos)
		out.Flush()
	}
}

func solve(v, l, r, k int) int {
	if l == r {
		return l
	}
	mid := (l + r) / 2

	// If the count of zeros in left child [l, mid] is unknown, query it
	if memo[2*v] == -1 {
		fmt.Fprintf(out, "? %d %d\n", l, mid)
		out.Flush()
		var sum int
		fmt.Fscan(in, &sum)
		// Number of zeros = length of range - sum of ones
		memo[2*v] = (mid - l + 1) - sum
	}

	if k <= memo[2*v] {
		// Go left
		memo[2*v]-- // One zero will be turned to one in this subtree
		return solve(2*v, l, mid, k)
	} else {
		// Go right
		// If right child count is cached, decrement it as well to keep state consistent
		if memo[2*v+1] != -1 {
			memo[2*v+1]--
		}
		return solve(2*v+1, mid+1, r, k-memo[2*v])
	}
}
```