#include <bits/stdc++.h>
const int N = 200005;
using namespace std;
int dp[4 * N], n, ans[N];
vector<vector<int> > ar;
vector<int> st;
void upd(int i, int l, int r, int pos, int val) {
  if (l == r) {
    dp[i] = val;
    return;
  }
  int m = (l + r) / 2;
  if (pos <= m)
    upd(i * 2, l, m, pos, val);
  else
    upd(i * 2 + 1, m + 1, r, pos, val);
  dp[i] = max(dp[i * 2], dp[i * 2 + 1]);
}
int get(int i, int l, int r, int se, int en) {
  if (se <= l && r <= en) return dp[i];
  if (l > en || r < se) return INT_MIN;
  int m = (l + r) / 2;
  int v1 = get(i * 2, l, m, se, en);
  int v2 = get(i * 2 + 1, m + 1, r, se, en);
  return max(v1, v2);
}
int main() {
  ios_base::sync_with_stdio(0);
  cout.tie(0);
  cin.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    int x, y;
    cin >> x >> y;
    ar.push_back({x, y, i});
    st.push_back(x);
  }
  sort(ar.begin(), ar.end());
  sort(st.begin(), st.end());
  for (int i = n - 1; i >= 0; i--) {
    int l = i;
    int r = upper_bound(st.begin(), st.end(), ar[i][0] + ar[i][1] - 1) -
            st.begin() - 1;
    int v = max(i, get(1, 1, n, l, r));
    upd(1, 1, n, i, v);
    ans[ar[i][2]] = abs(i - v) + 1;
  }
  for (int i = 0; i < n; i++) cout << ans[i] << ' ';
  return 0;
}
