← Home
For problem statement at 1000-1999/1500-1599/1560-1569/1562/problemD2.txt this is a correct solution, but verifier at 1000-1999/1500-1599/1560-1569/1562/verifierD2.go ends with case 1 failed: expected "0\n2\n7 6\n2\n9 8\n1\n7\n1\n8\n1\n7\n1\n8\n1\n1\n1\n11\n1\n11\n1\n7\n1\n7\n1\n7\n1\n4\n2\n2 1\n1\n8\n1\n8" got "0\n\n2\n6 7\n2\n8 9\n1\n7\n1\n8\n1\n7\n1\n8\n1\n1\n1\n11\n1\n11\n1\n7\n1\n7\n1\n7\n1\n4\n2\n1 2\n1\n8\n1\n8"
input:
1
11 17
+--++-+-+++
10 11
6 7
8 9
5 9
7 11
7 7
8 10
1 1
11 11
11 11
6 8
1 9
6 8
4 4
1 2
7 11
7 9
exit status 1 can you fix the verifier? ```go
package main

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

var in *bufio.Reader
var out *bufio.Writer

func main() {
	in = bufio.NewReader(os.Stdin)
	out = bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var t int
	if _, err := fmt.Fscan(in, &t); err != nil {
		return
	}

	for i := 0; i < t; i++ {
		solve()
	}
}

func solve() {
	var n, q int
	readInt(&n)
	readInt(&q)

	s := readStr()

	// P[i] stores the alternating prefix sum up to i
	// P[i] = sum_{j=1}^i (-1)^(j-1) * a[j]
	// where a[j] is 1 if s[j-1]=='+' else -1
	P := make([]int, n+1)
	curr := 0
	for i := 0; i < n; i++ {
		val := 1
		if s[i] == '-' {
			val = -1
		}
		// 1-based index
		idx := i + 1
		if idx%2 == 1 {
			curr += val
		} else {
			curr -= val
		}
		P[idx] = curr
	}

	// We need to find indices x such that P[x] + P[x-1] == Target
	// The range of values for P[x] + P[x-1] is roughly within [-2n, 2n]
	// We use an array with offset instead of a map for performance
	offset := 2*n + 5
	pos := make([][]int, 4*n+20)

	for i := 1; i <= n; i++ {
		val := P[i] + P[i-1]
		storeIdx := val + offset
		pos[storeIdx] = append(pos[storeIdx], i)
	}

	for k := 0; k < q; k++ {
		var l, r int
		readInt(&l)
		readInt(&r)

		sum := P[r] - P[l-1]
		if sum == 0 {
			fmt.Fprintln(out, "0")
			fmt.Fprintln(out, "")
			continue
		}

		if (r-l+1)%2 != 0 {
			// Odd length: remove 1 element
			fmt.Fprintln(out, "1")
			target := P[r] + P[l-1]
			ans := find(pos[target+offset], l, r)
			fmt.Fprintln(out, ans)
		} else {
			// Even length: remove 2 elements (l and one from l+1..r)
			fmt.Fprintln(out, "2")
			target := P[r] + P[l]
			ans := find(pos[target+offset], l+1, r)
			fmt.Fprintln(out, l, ans)
		}
	}
}

func find(indices []int, l, r int) int {
	// Find first index in sorted 'indices' that is >= l
	idx := sort.Search(len(indices), func(i int) bool {
		return indices[i] >= l
	})
	// Check if it's within range [l, r]
	if idx < len(indices) && indices[idx] <= r {
		return indices[idx]
	}
	return -1
}

func readInt(val *int) {
	var n int
	for {
		b, err := in.ReadByte()
		if err != nil {
			return
		}
		if b > ' ' {
			n = int(b - '0')
			break
		}
	}
	for {
		b, err := in.ReadByte()
		if err != nil {
			break
		}
		if b <= ' ' {
			break
		}
		n = n*10 + int(b-'0')
	}
	*val = n
}

func readStr() string {
	var buf []byte
	for {
		b, err := in.ReadByte()
		if err != nil {
			break
		}
		if b > ' ' {
			buf = append(buf, b)
			break
		}
	}
	for {
		b, err := in.ReadByte()
		if err != nil {
			break
		}
		if b <= ' ' {
			break
		}
		buf = append(buf, b)
	}
	return string(buf)
}
```