← Home
```go
package main

import (
	"io"
	"os"
)

func main() {
	buf, _ := io.ReadAll(os.Stdin)
	var pos int
	readInt := func() int {
		for pos < len(buf) && (buf[pos] < '0' || buf[pos] > '9') {
			pos++
		}
		if pos >= len(buf) {
			return 0
		}
		res := 0
		for pos < len(buf) && buf[pos] >= '0' && buf[pos] <= '9' {
			res = res*10 + int(buf[pos]-'0')
			pos++
		}
		return res
	}

	n := readInt()
	if n == 0 {
		return
	}
	a := make([]int, n+1)
	for i := 1; i <= n; i++ {
		a[i] = readInt()
	}

	B := 256
	dp := make([][]int32, B)
	for k := 1; k < B; k++ {
		dp[k] = make([]int32, n+1)
		for p := n; p >= 1; p-- {
			nextP := p + a[p] + k
			if nextP > n {
				dp[k][p] = 1
			} else {
				dp[k][p] = 1 + dp[k][nextP]
			}
		}
	}

	q := readInt()
	out := make([]byte, 0, 16*q)
	var temp [20]byte
	for i := 0; i < q; i++ {
		p := readInt()
		k := readInt()

		var ans int
		if k < B {
			ans = int(dp[k][p])
		} else {
			for p <= n {
				p = p + a[p] + k
				ans++
			}
		}

		tpos := 0
		if ans == 0 {
			out = append(out, '0', '\n')
		} else {
			for ans > 0 {
				temp[tpos] = byte('0' + ans%10)
				ans /= 10
				tpos++
			}
			for j := tpos - 1; j >= 0; j-- {
				out = append(out, temp[j])
			}
			out = append(out, '\n')
		}
	}
	os.Stdout.Write(out)
}
```