← Home
For problem statement at 0-999/200-299/220-229/220/problemB.txt this is a correct solution, but verifier at 0-999/200-299/220-229/220/verifierB.go ends with All 100 tests passed can you fix the verifier? package main

import (
	"bufio"
	"io"
	"math"
	"os"
	"sort"
	"strconv"
)

type Query struct {
	l, r  int
	idx   int
	block int
}

func main() {
	data, _ := io.ReadAll(os.Stdin)
	p := 0
	nextInt := func() int {
		for p < len(data) && (data[p] < '0' || data[p] > '9') {
			p++
		}
		v := 0
		for p < len(data) && data[p] >= '0' && data[p] <= '9' {
			v = v*10 + int(data[p]-'0')
			p++
		}
		return v
	}

	n := nextInt()
	m := nextInt()

	a := make([]int, n)
	for i := 0; i < n; i++ {
		a[i] = nextInt()
	}

	blockSize := int(math.Sqrt(float64(n))) + 1
	qs := make([]Query, m)
	for i := 0; i < m; i++ {
		l := nextInt() - 1
		r := nextInt() - 1
		qs[i] = Query{l: l, r: r, idx: i, block: l / blockSize}
	}

	sort.Slice(qs, func(i, j int) bool {
		if qs[i].block != qs[j].block {
			return qs[i].block < qs[j].block
		}
		if qs[i].block&1 == 1 {
			return qs[i].r > qs[j].r
		}
		return qs[i].r < qs[j].r
	})

	freq := make([]int, n+1)
	ans := make([]int, m)
	cur := 0

	add := func(x int) {
		if x > n {
			return
		}
		if freq[x] == x {
			cur--
		}
		freq[x]++
		if freq[x] == x {
			cur++
		}
	}

	remove := func(x int) {
		if x > n {
			return
		}
		if freq[x] == x {
			cur--
		}
		freq[x]--
		if freq[x] == x {
			cur++
		}
	}

	l, r := 0, -1
	for _, q := range qs {
		for l > q.l {
			l--
			add(a[l])
		}
		for r < q.r {
			r++
			add(a[r])
		}
		for l < q.l {
			remove(a[l])
			l++
		}
		for r > q.r {
			remove(a[r])
			r--
		}
		ans[q.idx] = cur
	}

	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	buf := make([]byte, 0, m*4)
	for i := 0; i < m; i++ {
		buf = strconv.AppendInt(buf, int64(ans[i]), 10)
		buf = append(buf, '\n')
	}
	out.Write(buf)
}