//POJ 2352 Stars 线段树 单点更新 成段求和
/*
题意:给一系列点(按y递增,y相同时按x递增排列),level指不超过当前点的高度且不在当前点右边的点的个数
求level值分别为0,1,2,..n-1的个数
思路:由于题意已经是按顺序给的点,所以直接按x轴建树
注意x从0开始,线段树从1开始,所以x全部+1处理
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 32005
#define M 15005
#define lson rt<<1,l,mid
#define rson rt<<1|1,mid+1,r
int sum[N<<2],ans[M];
int n;
void Pushup(int rt){
sum[rt] = sum[rt<<1] + sum[rt<<1|1];
}
void Update(int rt,int l,int r,int x){
if(l == r){
sum[rt]++;
return ;
}
int mid = (l + r) >> 1;
if(x <= mid) Update(lson,x);
if(x > mid ) Update(rson,x);
Pushup(rt);
}
int Query(int rt,int l,int r,int L,int R){
if(L <= l && R >= r)
return sum[rt];
int mid = (l + r) >> 1;
int res = 0;
if(L <= mid) res += Query(lson,L,R);
if(R > mid ) res += Query(rson,L,R);
return res;
}
int main(){
int i;
int x,y;
while(scanf("%d",&n)!=EOF){
memset(sum,0,sizeof(sum));
memset(ans,0,sizeof(ans));
for(i = 1; i <= n; ++i){
scanf("%d %d",&x,&y);
++x;
++ans[Query(1,1,32001,1,x)];
Update(1,1,32001,x);
}
for(i = 0; i < n; ++i)
printf("%d\n",ans[i]);
}
return 0;
}