#include <bits/stdc++.h>
using namespace std;
int a[1123456], b[1123456], bit[1123456];
inline int query(int i) {
  int ret = 0;
  while (i > 0) {
    ret += bit[i];
    i -= (i & (-i));
  }
  return ret;
}
inline void update(int i, int v) {
  while (i < 1123456) {
    bit[i] += v;
    i += (i & (-i));
  }
}
inline int bin_search(int l, int r, int x) {
  while (l < r) {
    int m = (l + r) / 2;
    if (query(m) >= x) {
      r = m;
    } else {
      l = m + 1;
    }
  }
  return r;
}
int main() {
  int n, i;
  scanf("%d", &n);
  for (i = 0; i < n; i++) {
    scanf("%d", &a[i]);
  }
  for (i = 0; i < n; i++) {
    scanf("%d", &b[i]);
  }
  memset(bit, 0, sizeof bit);
  for (i = n - 1; i >= 0; i--) {
    update(a[i] + 1, 1);
    a[i] = query(a[i]);
  }
  memset(bit, 0, sizeof bit);
  for (i = n - 1; i >= 0; i--) {
    update(b[i] + 1, 1);
    b[i] = query(b[i]);
  }
  for (i = n - 1; i > 0; i--) {
    a[i] += b[i];
    a[i - 1] += a[i] / (n - i);
    a[i] %= (n - i);
  }
  a[0] += b[0];
  a[0] %= n;
  memset(bit, 0, sizeof bit);
  for (i = 1; i <= n; i++) {
    update(i, 1);
  }
  for (i = 0; i < n; i++) {
    a[i] = bin_search(1, n, a[i] + 1) - 1;
    update(a[i] + 1, -1);
  }
  for (i = 0; i < n; i++) {
    printf("%d ", a[i]);
  }
  cout << endl;
  return 0;
}
