#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
const long long N = 1e5 + 10;
long long st[4 * N];
long long a[N];
long long ans[N];
long long query(long long node, long long L, long long R, long long i,
                long long j) {
  if (j < L || i > R) return 0;
  if (i <= L && R <= j) return st[node];
  long long M = (L + R) / 2;
  long long left = query(node * 2, L, M, i, j);
  long long right = query(node * 2 + 1, M + 1, R, i, j);
  return max(left, right);
}
void update(long long node, long long L, long long R, long long pos,
            long long val) {
  if (L == R) {
    st[node] = val;
    return;
  }
  long long M = (L + R) / 2;
  if (pos <= M)
    update(node * 2, L, M, pos, val);
  else
    update(node * 2 + 1, M + 1, R, pos, val);
  st[node] = max(st[node * 2], st[node * 2 + 1]);
}
int32_t main() {
  long long n;
  cin >> n;
  vector<pair<long long, pair<long long, long long> > > vp;
  set<long long> s;
  for (long long i = 1; i <= n; i++) {
    long long x, y;
    cin >> x >> y;
    vp.push_back({x, {y, i}});
  }
  map<long long, long long> mp;
  sort(vp.begin(), vp.end());
  for (long long i = 0; i < vp.size(); i++) {
    s.insert(vp[i].first);
    mp[vp[i].first] = i;
  }
  for (long long i = vp.size() - 1; i >= 0; i--) {
    if (i == vp.size() - 1) {
      ans[i] = i + 1;
      update(1, 1, n, i + 1, i + 1);
    } else {
      if (vp[i].first + vp[i].second.first - 1 < vp[i + 1].first) {
        ans[i] = i + 1;
        update(1, 1, n, i + 1, i + 1);
      } else {
        if (s.upper_bound(vp[i].first + vp[i].second.first - 1) == s.end()) {
          ans[i] = n;
          update(1, 1, n, i + 1, n);
        } else {
          long long p = *s.upper_bound(vp[i].first + vp[i].second.first - 1);
          long long idx = mp[p];
          long long k = query(1, 1, n, i + 1, idx);
          ans[i] = k;
          update(1, 1, n, i + 1, k);
        }
      }
    }
  }
  for (long long i = 0; i < n; i++) {
    a[vp[i].second.second] = ans[i] - i;
  }
  for (long long i = 1; i <= n; i++) {
    cout << a[i] << " ";
  }
  cout << endl;
}
