#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const double EPS = 1e-8;
const double PI = acos(-1);
template <class T>
bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
template <typename Ch, typename Tr, typename C, typename = decltype(begin(C()))>
basic_ostream<Ch, Tr> &operator<<(basic_ostream<Ch, Tr> &os, const C &c) {
  os << '[';
  for (auto i = begin(c); i != end(c); ++i)
    os << (i == begin(c) ? "" : " ") << *i;
  return os << ']';
}
template <class S, class T>
ostream &operator<<(ostream &o, const pair<S, T> &t) {
  return o << '(' << t.first << ',' << t.second << ')';
}
template <int N, class Tp>
void output(ostream &, const Tp &) {}
template <int N, class Tp, class, class... Ts>
void output(ostream &o, const Tp &t) {
  if (N) o << ',';
  o << get<N>(t);
  output<N + 1, Tp, Ts...>(o, t);
}
template <class... Ts>
ostream &operator<<(ostream &o, const tuple<Ts...> &t) {
  o << '(';
  output<0, tuple<Ts...>, Ts...>(o, t);
  return o << ')';
}
template <class T>
void output(T t, char z = 10) {
  if (t < 0) t = -t, putchar(45);
  int c[20];
  int k = 0;
  while (t) c[k++] = t % 10, t /= 10;
  for (k || (c[k++] = 0); k;) putchar(c[--k] ^ 48);
  putchar(z);
}
template <class T>
void outputs(T t) {
  output(t);
}
template <class S, class... T>
void outputs(S a, T... t) {
  output(a, 32);
  outputs(t...);
}
template <class T>
void output(T *a, int n) {
  for (int i = 0; i < (int)(n); ++i) cout << a[i] << (i != n - 1 ? ',' : '\n');
}
template <class T>
void output(T *a, int n, int m) {
  for (int i = 0; i < (int)(n); ++i) output(a[i], m);
}
template <class T>
bool input(T &t) {
  int n = 1, c;
  for (t = 0; !isdigit(c = getchar()) && ~c && c - 45;)
    ;
  if (!~c) return 0;
  for (c - 45 && (n = 0, t = c ^ 48); isdigit(c = getchar());)
    t = 10 * t + c - 48;
  t = n ? -t : t;
  return 1;
}
template <class S, class... T>
bool input(S &a, T &...t) {
  input(a);
  return input(t...);
}
template <class T>
bool inputs(T *a, int n) {
  for (int i = 0; i < (int)(n); ++i)
    if (!input(a[i])) return 0;
  return 1;
}
int a[300000];
int b[300000];
int n;
int ans[300000];
int solve(int k) {
  if (k == n) return 0;
  int c = solve(k + 1);
  ans[k] = (a[k] + b[k] + c) % (n - k);
  return (a[k] + b[k] + c) / (n - k);
}
template <class T>
struct BIT {
  int N, K;
  T B[300010];
  void init(int n) {
    N = n;
    for (int i = 0; i < (int)(n); ++i) B[i] = 0;
    for (K = 1; (K << 1) < N; K <<= 1)
      ;
  }
  void add(int x, T w) {
    for (; x < N; x |= x + 1) B[x] += w;
  }
  T sum(int a) {
    T r = 0;
    for (int x = a - 1; x >= 0; x = (x & (x + 1)) - 1) r += B[x];
    return r;
  }
  T sum(int a, int b) { return sum(b) - sum(a); }
  int lb(T w) {
    int x = 0;
    for (int k = K; k; k >>= 1)
      if (x + k <= N && B[x + k - 1] < w) w -= B[x + k - 1], x += k;
    return x;
  }
};
void func(int *x) {
  static BIT<int> bit;
  bit.init(n);
  for (int i = 0; i < (int)(n); ++i) {
    bit.add(x[i], 1);
    x[i] -= bit.sum(x[i]);
  }
}
int main() {
  while (cin >> n) {
    inputs(a, n);
    inputs(b, n);
    func(a);
    func(b);
    solve(0);
    static BIT<int> bit;
    bit.init(n);
    for (int i = 0; i < (int)(n); ++i) bit.add(i, 1);
    for (int i = 0; i < (int)(n); ++i) {
      ans[i] = bit.lb(ans[i] + 1);
      bit.add(ans[i], -1);
    }
    for (int i = 0; i < (int)(n); ++i) {
      printf("%d%c", ans[i], i != n - 1 ? ' ' : '\n');
    }
  }
}
