#include <bits/stdc++.h>
using namespace std;
int bit[200002];
void update(int idx, int val) {
  while (idx <= 200000) {
    bit[idx] += val;
    idx += idx & -idx;
  }
}
int get(int idx) {
  int sum = 0;
  while (idx > 0) {
    sum = sum + bit[idx];
    idx -= idx & -idx;
  }
  return sum;
}
int ans[200001];
int a[200001];
int b[200001];
int bfind1(int i, int j, int val) {
  if (get(i) == val) return i;
  if (i + 1 == j) return j;
  int mid = (i + j) / 2;
  if (get(mid) >= val)
    return bfind1(i, mid, val);
  else
    return bfind1(mid + 1, j, val);
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i]);
    update(i + 1, 1);
  }
  for (int i = 0; i < n; i++) {
    ans[n - 1 - i] += get(a[i]);
    update(a[i] + 1, -1);
  }
  memset(bit, 0, sizeof bit);
  for (int i = 0; i < n; i++) {
    scanf("%d", &b[i]);
    update(i + 1, 1);
  }
  for (int i = 0; i < n; i++) {
    ans[n - 1 - i] += get(b[i]);
    update(b[i] + 1, -1);
  }
  for (int i = 0; i < n; i++) {
    if (ans[i] > i) {
      ans[i] -= (i + 1);
      ans[i + 1] += 1;
    }
  }
  memset(bit, 0, sizeof bit);
  for (int i = 0; i < n; i++) {
    update(i + 1, 1);
  }
  for (int i = n - 1; i >= 0; i--) {
    int idx = bfind1(1, n, ans[i] + 1);
    update(idx, -1);
    printf("%d ", idx - 1);
  }
  printf("\n");
}
