← Home
For problem statement at 0-999/500-599/530-539/538/problemF.txt this is a correct solution, but verifier at 0-999/500-599/530-539/538/verifierF.go ends with All 50 tests passed. can you fix the verifier? package main

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

type Element struct {
	val int
	idx int
}

func nextInt(r *bufio.Reader) int {
	var n int
	var sign int = 1
	var c byte
	for {
		c, _ = r.ReadByte()
		if c == '-' || (c >= '0' && c <= '9') {
			break
		}
	}
	if c == '-' {
		sign = -1
	} else {
		n = int(c - '0')
	}
	for {
		c, _ = r.ReadByte()
		if c < '0' || c > '9' {
			break
		}
		n = n*10 + int(c - '0')
	}
	return n * sign
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	n := nextInt(reader)

	elements := make([]Element, n)
	for i := 0; i < n; i++ {
		elements[i].val = nextInt(reader)
		elements[i].idx = i + 1
	}

	sort.Slice(elements, func(i, j int) bool {
		return elements[i].val < elements[j].val
	})

	bit := make([]int, n+1)
	add := func(idx int, val int) {
		for ; idx <= n; idx += idx & -idx {
			bit[idx] += val
		}
	}
	query := func(idx int) int {
		sum := 0
		for ; idx > 0; idx -= idx & -idx {
			sum += bit[idx]
		}
		return sum
	}

	ans := make([]int, n)

	for i := 0; i < n; {
		j := i
		for j < n && elements[j].val == elements[i].val {
			j++
		}

		for k := i; k < j; k++ {
			v := elements[k].idx
			if v == 1 {
				for kAry := 1; kAry < n; kAry++ {
					L := 2
					R := kAry + 1
					if R > n {
						R = n
					}
					ans[kAry] += query(R) - query(L-1)
				}
			} else {
				maxK := (n - 2) / (v - 1)
				for kAry := 1; kAry <= maxK; kAry++ {
					L := kAry*(v-1) + 2
					R := kAry*v + 1
					if R > n {
						R = n
					}
					ans[kAry] += query(R) - query(L-1)
				}
			}
		}

		for k := i; k < j; k++ {
			add(elements[k].idx, 1)
		}

		i = j
	}

	writer := bufio.NewWriter(os.Stdout)
	for i := 1; i < n; i++ {
		if i > 1 {
			writer.WriteByte(' ')
		}
		fmt.Fprint(writer, ans[i])
	}
	writer.WriteByte('\n')
	writer.Flush()
}