#include <bits/stdc++.h>
using namespace std;
map<long long, bool> visit;
typedef struct Special {
  bool flag;
  long long id;
  long long num;
  Special() {
    this->id = -1;
    this->num = -1;
    this->flag = 0;
  }
  Special(long long id, long long num, bool flag) {
    this->id = id;
    this->num = num;
    this->flag = flag;
  }
} Special;
const long long sz = 2e5 + 20;
Special dat[2 * sz];
long long hit[sz];
int main() {
  memset((hit), 0, sizeof(hit));
  long long N;
  scanf("%lld", &N);
  for (long long i = 0; i < 2 * N; i += 2) {
    cin >> dat[i].num;
    dat[i].id = i;
    dat[i].flag = 1;
    cin >> dat[i + 1].num;
    dat[i + 1].id = i;
    dat[i + 1].flag = 0;
  }
  sort((dat), (dat) + (2 * N), [](const Special& A, const Special& B) {
    if (A.num < B.num) {
      return 1;
    } else if (A.num == B.num) {
      if (A.flag > B.flag) {
        return 1;
      } else {
        return 0;
      }
    } else {
      return 0;
    }
  });
  set<long long> ids;
  vector<long long> pos;
  for (long long i = 0; i < 2 * N; ++i) {
    if (dat[i].flag) {
      pos.push_back(dat[i].num);
      if (pos.size() > 1) {
        hit[ids.size()] += max(
            pos.back() - pos[pos.size() - 2] - visit[pos[pos.size() - 2]], 0LL);
      }
      ids.insert(dat[i].id);
    } else {
      pos.push_back(dat[i].num);
      if (pos.size() > 1) {
        hit[ids.size()] += max(
            pos.back() - pos[pos.size() - 2] + 1 - visit[pos[pos.size() - 2]],
            0LL);
      }
      visit[pos.back()] = 1;
      ids.erase(dat[i].id);
    }
  }
  for (long long i = 1; i <= N; ++i) {
    cout << hit[i] << " ";
  }
  cout << endl;
  return 0;
}
