← Home
For problem statement at 0-999/600-699/650-659/652/problemD.txt this is a correct solution, but verifier at 0-999/600-699/650-659/652/verifierD.go ends with All tests passed! can you fix the verifier? package main

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

type Interval struct {
	l, r int
}

func main() {
	data, _ := io.ReadAll(os.Stdin)
	p := 0
	nextInt := func() int {
		for p < len(data) && (data[p] == ' ' || data[p] == '\n' || data[p] == '\r' || data[p] == '\t') {
			p++
		}
		sign := 1
		if data[p] == '-' {
			sign = -1
			p++
		}
		val := 0
		for p < len(data) && data[p] >= '0' && data[p] <= '9' {
			val = val*10 + int(data[p]-'0')
			p++
		}
		return val * sign
	}

	n := nextInt()
	segs := make([]Interval, n)
	for i := 0; i < n; i++ {
		segs[i] = Interval{l: nextInt(), r: nextInt()}
	}

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

	sort.Slice(orderR, func(i, j int) bool {
		return segs[orderR[i]].r < segs[orderR[j]].r
	})

	rank := make([]int, n)
	for i, id := range orderR {
		rank[id] = i + 1
	}

	sort.Slice(orderL, func(i, j int) bool {
		return segs[orderL[i]].l < segs[orderL[j]].l
	})

	bit := make([]int, n+2)
	add := func(i, v int) {
		for i <= n {
			bit[i] += v
			i += i & -i
		}
	}
	sum := func(i int) int {
		s := 0
		for i > 0 {
			s += bit[i]
			i -= i & -i
		}
		return s
	}

	ans := make([]int, n)
	for i := n - 1; i >= 0; i-- {
		id := orderL[i]
		ans[id] = sum(rank[id] - 1)
		add(rank[id], 1)
	}

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