← Home
For problem statement at 0-999/300-399/300-309/301/problemD.txt this is a correct solution, but verifier at 0-999/300-399/300-309/301/verifierD.go ends with passed 100/100 tests can you fix the verifier? ```go
package main

import (
	"bufio"
	"os"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var n, m int
	n = readInt(reader)
	m = readInt(reader)

	pos := make([]int, n+1)
	for i := 1; i <= n; i++ {
		val := readInt(reader)
		pos[val] = i
	}

	pairs := make([][]int, n+1)
	for i := 1; i <= n; i++ {
		for j := i; j <= n; j += i {
			u, v := pos[i], pos[j]
			if u > v {
				u, v = v, u
			}
			pairs[v] = append(pairs[v], u)
		}
	}

	type query struct {
		l, id int
	}
	queries := make([][]query, n+1)
	for i := 0; i < m; i++ {
		l := readInt(reader)
		r := readInt(reader)
		queries[r] = append(queries[r], query{l, i})
	}

	ans := make([]int, m)
	bit := make([]int, n+1)

	for r := 1; r <= n; r++ {
		for _, u := range pairs[r] {
			for idx := u; idx <= n; idx += idx & -idx {
				bit[idx]++
			}
		}
		for _, q := range queries[r] {
			res := 0
			// Calculate sum(r)
			for idx := r; idx > 0; idx -= idx & -idx {
				res += bit[idx]
			}
			// Subtract sum(q.l - 1)
			for idx := q.l - 1; idx > 0; idx -= idx & -idx {
				res -= bit[idx]
			}
			ans[q.id] = res
		}
	}

	for i := 0; i < m; i++ {
		writeInt(writer, ans[i])
		writer.WriteByte('\n')
	}
}

func readInt(r *bufio.Reader) int {
	var x int
	var c byte
	var err error
	for {
		c, err = r.ReadByte()
		if err != nil {
			return x
		}
		if c >= '0' && c <= '9' {
			x = int(c - '0')
			break
		}
	}
	for {
		c, err = r.ReadByte()
		if err != nil {
			break
		}
		if c < '0' || c > '9' {
			break
		}
		x = x*10 + int(c-'0')
	}
	return x
}

func writeInt(w *bufio.Writer, x int) {
	if x == 0 {
		w.WriteByte('0')
		return
	}
	var b [20]byte
	i := len(b)
	for x > 0 {
		i--
		b[i] = byte(x%10 + '0')
		x /= 10
	}
	w.Write(b[i:])
}
```