1 #include
2 #include
3 #include
4 using namespace std;
5 const int N = 32000 + 10;
6
7 int ans[N << 2], sum[N << 2], x, y;
8
9 void PushUp(int rt) {
10 sum[rt] = sum[rt << 1] + sum[rt << 1 | 1];
11 return;
12 }
13
14 void Build(int l, int r, int rt) {
15 //Tree[rt] ++;
16 if (l == r) {
17 sum[rt] = 0;
18 return;
19 }
20 int m = (l + r) >> 1;
21 Build(l, m, rt << 1);
22 Build(m + 1, r, rt << 1 | 1);
23 }
24 void Update(int p, int l, int r, int rt) {
25 //Tree[rt]--;
26 if (l == r) {
27 sum[rt]++;
28 return;
29 }
30 int m = (l + r) >> 1;
31 if (p <= m) Update(p, l, m, rt << 1);
32 else Update(p, m + 1, r, rt << 1 | 1);
33 PushUp(rt);
34 }
35
36 int Query(int L, int R, int l, int r, int rt) {
37 if (l >= L && r <= R) {
38 return sum[rt];
39 }
40 int m = (l + r) >> 1;
41 int ANS = 0;
42 if (m >= L) ANS += Query(L, R, l, m, rt << 1);
43 if (m < R) ANS += Query(L, R, m + 1, r, rt << 1 | 1);
44 return ANS;
45 }
46
47 int main() {
48
49 int n;
50 scanf("%d", &n);
51 //Build(1, 32000, 1);
52 for (int i = 1; i <= n; i++) {
53 scanf("%d %d", &x, &y);
54 int t = Query(0, x, 0, 32000, 1);
55 //cout << t << "eee" << "\n";
56 ans[t]++;
57 Update(x, 0, 32000, 1);
58 }
59 //Build(1, n, 1);a
60 /*for (int i = 1; i <= 7; i++) {
61 cout << sum[i] << "<" << "\n";
62 }*/
63 for (int i = 0; i < n; i++) {
64 printf("%d\n", ans[i]);
65 }
66
67 return 0;
68 }