#include <bits/stdc++.h>
using namespace std;
const int Maxn = 200000 + 10;
int n, a[Maxn], b[Maxn], f[Maxn];
int c[Maxn];
void upd(int x, int val) {
  for (int i = x; i <= n; i += (i & -i)) c[i] += val;
}
int sum(int x) {
  int ret = 0;
  for (int i = x; i; i -= (i & -i)) ret += c[i];
  return ret;
}
void init() {
  memset(c, 0, sizeof(c));
  for (int i = 1; i <= n; i++) upd(i, 1);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    a[i]++;
  }
  for (int i = 1; i <= n; i++) {
    scanf("%d", &b[i]);
    b[i]++;
  }
  init();
  for (int i = 1; i < n; i++) {
    int les = sum(a[i] - 1);
    f[n - i] += les;
    upd(a[i], -1);
  }
  init();
  for (int i = 1; i < n; i++) {
    int les = sum(b[i] - 1);
    f[n - i] += les;
    upd(b[i], -1);
  }
  for (int i = 1; i < n; i++) {
    f[i + 1] += f[i] / (i + 1);
    f[i] = f[i] % (i + 1);
  }
  init();
  int sml = 1;
  for (int i = n - 1; i >= 1; i--) {
    int l = 1, r = n, mid, tmp, ans = -1;
    while (l <= r) {
      mid = (l + r) >> 1;
      tmp = sum(mid - 1);
      if (tmp <= f[i]) {
        l = mid + 1;
        ans = mid;
      } else
        r = mid - 1;
    }
    if (ans == -1) ans = sml;
    printf("%d ", ans - 1);
    upd(ans, -1);
    while (!c[sml]) sml++;
  }
  for (int i = 1; i <= n; i++)
    if (c[i]) {
      printf("%d\n", i - 1);
      break;
    }
  return 0;
}
