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)
}