#include <bits/stdc++.h>
using namespace std;
const int MAXN = (int)1e5 + 10;
int ST[MAXN << 2];
void down_lazy(int p, int l, int r)
{
ST[l] += ST[p];
ST[r] += ST[p];
ST[p] = 0;
}
void update(int p, int b, int e, int x, int t)
{
if (b == e){
ST[p] += t;
}
else{
int mid = (b + e) >> 1;
int left = p << 1;
int right = left | 1;
if (ST[p]) down_lazy(p, left, right);
if (x <= mid) ST[right] += t, update(left, b, mid, x, t);
else update(right, mid + 1, e, x, t);
}
}
int query(int p, int b, int e, int x){
if (b == e){
return ST[p];
}
else{
int mid = (b + e) >> 1;
int left = p << 1;
int right = left | 1;
if (ST[p]) down_lazy(p, left, right);
if (x <= mid) return query(left, b, mid, x);
else return query(right, mid + 1, e, x);
}
}
struct coder
{
int a, b, c;
const bool operator <(const coder &other) const
{
if (a == other.a) return b < other.b;
return a < other.a;
}
} L[(int)3e5 + 10];
int ANS[(int)3e5 + 10];
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; ++i){
scanf("%d%d", &L[i].a, &L[i].b);
L[i].c = i;
}
sort(L, L + n);
for (int i = 0, t; i < n; ){
coder cur = L[i];
for (t = 0 ; i < n && L[i].a == cur.a && L[i].b == cur.b; ++i, ++t)
ANS[ L[i].c ] = query(1, 0, MAXN, L[i].b );
update(1, 0, MAXN, cur.b, t);
}
for (int i = 0; i < n; ++i) printf("%d\n", ANS[i]);
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE1BWE4gPSAoaW50KTFlNSArIDEwOwoKaW50IFNUW01BWE4gPDwgMl07Cgp2b2lkIGRvd25fbGF6eShpbnQgcCwgaW50IGwsIGludCByKQp7CglTVFtsXSArPSBTVFtwXTsKCVNUW3JdICs9IFNUW3BdOwoJU1RbcF0gPSAwOwp9Cgp2b2lkIHVwZGF0ZShpbnQgcCwgaW50IGIsIGludCBlLCBpbnQgeCwgaW50IHQpCnsKCWlmIChiID09IGUpewoJCVNUW3BdICs9IHQ7Cgl9CgllbHNlewoJCWludCBtaWQgPSAoYiArIGUpID4+IDE7CgkJaW50IGxlZnQgPSBwIDw8IDE7CgkJaW50IHJpZ2h0ID0gbGVmdCB8IDE7CgoJCWlmIChTVFtwXSkgZG93bl9sYXp5KHAsIGxlZnQsIHJpZ2h0KTsKCQlpZiAoeCA8PSBtaWQpIFNUW3JpZ2h0XSArPSB0LCB1cGRhdGUobGVmdCwgYiwgbWlkLCB4LCB0KTsKCQllbHNlIHVwZGF0ZShyaWdodCwgbWlkICsgMSwgZSwgeCwgdCk7Cgl9Cn0KCmludCBxdWVyeShpbnQgcCwgaW50IGIsIGludCBlLCBpbnQgeCl7CglpZiAoYiA9PSBlKXsKCQlyZXR1cm4gU1RbcF07Cgl9CgllbHNlewoJCWludCBtaWQgPSAoYiArIGUpID4+IDE7CgkJaW50IGxlZnQgPSBwIDw8IDE7CgkJaW50IHJpZ2h0ID0gbGVmdCB8IDE7CgoJCWlmIChTVFtwXSkgZG93bl9sYXp5KHAsIGxlZnQsIHJpZ2h0KTsKCQlpZiAoeCA8PSBtaWQpIHJldHVybiBxdWVyeShsZWZ0LCBiLCBtaWQsIHgpOwoJCWVsc2UgcmV0dXJuIHF1ZXJ5KHJpZ2h0LCBtaWQgKyAxLCBlLCB4KTsKCX0KfQoKc3RydWN0IGNvZGVyCnsKCWludCBhLCBiLCBjOwoJY29uc3QgYm9vbCBvcGVyYXRvciA8KGNvbnN0IGNvZGVyICZvdGhlcikgY29uc3QKCXsKCQlpZiAoYSA9PSBvdGhlci5hKSByZXR1cm4gYiA8IG90aGVyLmI7CgkJcmV0dXJuIGEgPCBvdGhlci5hOwoJfQp9IExbKGludCkzZTUgKyAxMF07CgppbnQgQU5TWyhpbnQpM2U1ICsgMTBdOwoKaW50IG1haW4oKQp7CglpbnQgbjsKCXNjYW5mKCIlZCIsICZuKTsKCglmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSl7CgkJc2NhbmYoIiVkJWQiLCAmTFtpXS5hLCAmTFtpXS5iKTsKCQlMW2ldLmMgPSBpOwoJfQoKCXNvcnQoTCwgTCArIG4pOwoJZm9yIChpbnQgaSA9IDAsIHQ7IGkgPCBuOyApewoJCWNvZGVyIGN1ciA9IExbaV07CgkJZm9yICh0ID0gMCA7IGkgPCBuICYmIExbaV0uYSA9PSBjdXIuYSAmJiBMW2ldLmIgPT0gY3VyLmI7ICsraSwgKyt0KQoJCQlBTlNbIExbaV0uYyBdID0gcXVlcnkoMSwgMCwgTUFYTiwgTFtpXS5iICk7CgkJdXBkYXRlKDEsIDAsIE1BWE4sIGN1ci5iLCB0KTsKCX0KCglmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgcHJpbnRmKCIlZFxuIiwgQU5TW2ldKTsKfQo=