← Home
For problem statement at 1000-1999/1700-1799/1710-1719/1712/problemE2.txt this is a correct solution, but verifier at 1000-1999/1700-1799/1710-1719/1712/verifierE2.go ends with All tests passed can you fix the verifier? package main

import (
	"bytes"
	"io"
	"os"
	"strconv"
)

type Query struct {
	r  int
	id int
}

func main() {
	buf, _ := io.ReadAll(os.Stdin)
	pos := 0
	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
	}

	t := readInt()
	if t == 0 {
		return
	}

	const N = 200000
	queries := make([][]Query, N+1)

	for i := 0; i < t; i++ {
		l := readInt()
		r := readInt()
		queries[l] = append(queries[l], Query{r, i})
	}

	ans := make([]int64, t)
	fen := make([]int64, N+1)

	add := func(idx int, val int64) {
		for ; idx <= N; idx += idx & -idx {
			fen[idx] += val
		}
	}

	query := func(idx int) int64 {
		var s int64
		for ; idx > 0; idx -= idx & -idx {
			s += fen[idx]
		}
		return s
	}

	C := make([]int64, N+1)

	for i := N; i >= 1; i-- {
		for k := 2 * i; k <= N; k += i {
			if C[k] > 0 {
				add(k, C[k])
			}
			C[k]++
		}

		if i%3 == 0 {
			k2 := 2 * i
			if k2 <= N {
				add(k2, 1)
			}
		}

		if i%6 == 0 {
			k3 := 5 * i / 2
			if k3 <= N {
				add(k3, 1)
			}
		}

		for _, q := range queries[i] {
			n := int64(q.r - i + 1)
			total := n * (n - 1) * (n - 2) / 6
			bad := query(q.r)
			ans[q.id] = total - bad
		}
	}

	var out bytes.Buffer
	for i := 0; i < t; i++ {
		out.WriteString(strconv.FormatInt(ans[i], 10))
		out.WriteByte('\n')
	}
	os.Stdout.Write(out.Bytes())
}