n = int(input())

xy = []

idx = [None]*n

ys = [None]*n

ans = [None]*n

accumx = [None]*n

accumn = [None]*n

for i in range(n):

    x, y = map(int, input().split())

    idx[x-1] = i

    ys[x-1] = y-1

accumx[-1] = ys[-1]

for i in range(n-2, -1, -1):

    accumx[i] = max(accumx[i+1], ys[i])

accumn[0] = ys[0]

for i in range(1, n):

    accumn[i] = min(accumn[i-1], ys[i])



def bisect(x):

    ok = 0

    ng = n

    while abs(ok-ng)>1:

        mid = (ok+ng)//2

        if accumx[mid]>x:

            ok = mid

        else:

            ng = mid

    return ok



nowx = 0

while nowx<n:

    nxtx = nowx

    tmp = bisect(ys[nowx])

    while tmp>nxtx:

        nxtx = tmp

        tmp = bisect(accumn[nxtx])

    if nxtx<nowx:

        nxtx = nowx

    for i in range(nowx, nxtx+1):

        ans[idx[i]] = nxtx-nowx+1

    nowx = nxtx + 1

print(*ans, sep='\n')

n = int(input())

xy = []

idx = [None]*n

ys = [None]*n

ans = [None]*n

accumn = [None]*n

for i in range(n):

    x, y = map(int, input().split())

    idx[x-1] = i

    ys[x-1] = y-1

accumn[0] = ys[0]

for i in range(1, n):

    accumn[i] = min(accumn[i-1], ys[i])



b = 0

for i in range(n):

    if accumn[i]==n-i-1:

        for j in range(b, i+1):

            ans[idx[j]] = i-b+1

        b = i+1

print(*ans, sep='\n')

n = int(input())
xy = []
idx = [None] * n
ys = [None] * n
ans = [None] * n
accumx = [None] * n
accumn = [None] * n
for i in range(n):
    x, y = map(int, input().split())
    idx[x - 1] = i
    ys[x - 1] = y - 1
accumx[-1] = ys[-1]
for i in range(n - 2, -1, -1):
    accumx[i] = max(accumx[i + 1], ys[i])
accumn[0] = ys[0]
for i in range(1, n):
    accumn[i] = min(accumn[i - 1], ys[i])


def bisect(x):
    ok = 0
    ng = n
    while abs(ok - ng) > 1:
        mid = (ok + ng) // 2
        if accumx[mid] > x:
            ok = mid
        else:
            ng = mid
    return ok


nowx = 0
while nowx < n:
    nxtx = nowx
    tmp = bisect(ys[nowx])
    while tmp > nxtx:
        nxtx = tmp
        tmp = bisect(accumn[nxtx])
    if nxtx < nowx:
        nxtx = nowx
    for i in range(nowx, nxtx + 1):
        ans[idx[i]] = nxtx - nowx + 1
    nowx = nxtx + 1
print(*ans, sep="\n")

n = int(input())
xy = []
idx = [None] * n
ys = [None] * n
ans = [None] * n
accumn = [None] * n
for i in range(n):
    x, y = map(int, input().split())
    idx[x - 1] = i
    ys[x - 1] = y - 1
accumn[0] = ys[0]
for i in range(1, n):
    accumn[i] = min(accumn[i - 1], ys[i])
b = 0
for i in range(n):
    if accumn[i] == n - i - 1:
        for j in range(b, i + 1):
            ans[idx[j]] = i - b + 1
        b = i + 1
print(*ans, sep="\n")

-accumx = [None] * n -accumx[-1] = ys[-1] -for i in range(n - 2, -1, -1): -    accumx[i] = max(accumx[i + 1], ys[i]) - - -def bisect(x): -    ok = 0 -    ng = n -    while abs(ok - ng) > 1: -        mid = (ok + ng) // 2 -        if accumx[mid] > x: -            ok = mid -        else: -            ng = mid -    return ok - - -nowx = 0 -while nowx < n: -    nxtx = nowx -    tmp = bisect(ys[nowx]) -    while tmp > nxtx: -        nxtx = tmp -        tmp = bisect(accumn[nxtx]) -    if nxtx < nowx: -        nxtx = nowx -    for i in range(nowx, nxtx + 1): -        ans[idx[i]] = nxtx - nowx + 1 -    nowx = nxtx + 1 +b = 0 +for i in range(n): +    if accumn[i] == n - i - 1: +        for j in range(b, i + 1): +            ans[idx[j]] = i - b + 1 +        b = i + 1