/*
TASK:round
LANG:C
*/
#include <stdio.h>

#define MAXN 2048
#define TREE_SIZE (1 << 12)

int n;
short tree[2][2*TREE_SIZE];
int p[2][MAXN];
int T[MAXN][MAXN];

inline int MIN(int a,int b)
  {
    if (a < b) return a;
    return b;
  }

void Init()
  {
    int i;
    
//    freopen("round.in","rt",stdin);
    scanf("%d",&n);

    for (i = 1;i <= n;i++)
        scanf("%d",&p[0][i]);
      
    for (i = 1;i <= n;i++)
        scanf("%d",&p[1][i]);
  }

void PushTree(int v,int l,int r,int tr)
  {
    int m = (l + r) / 2;

    if (l == r) tree[tr][l + r]++;
    else
      {
        if (v <= m)
          {
            PushTree(v,l,m,tr);
            tree[tr][l + r] = tree[tr][l + m] + tree[tr][m + 1 + r];
          }
        else
          {
            PushTree(v,m + 1,r,tr);
            tree[tr][l + r] = tree[tr][l + m] + tree[tr][m + 1 + r];
          }
      }
  }

int PopTree(int a,int b,int l,int r,int tr)
  {
    int m = (l + r) / 2;
    if (l == a && r == b) return tree[tr][l + r];
    if (b <= m) return PopTree(a,b,l,m,tr);
    if (a > m) return PopTree(a,b,m + 1,r,tr);
    return PopTree(a,m,l,m,tr) + PopTree(m + 1,b,m + 1,r,tr);
  }

inline int GetP2Move(int per)
  {
    int res;
    if (per < n)
      {
        res = MIN(PopTree(per,n,0,TREE_SIZE - 1,1),PopTree(n + 1,2*n,0,TREE_SIZE - 1,1) + PopTree(1,per,0,TREE_SIZE - 1,1));
        return res;
      }
    res = MIN(PopTree(n + 1,per,0,TREE_SIZE - 1,1),PopTree(1,n,0,TREE_SIZE - 1,1) + PopTree(per,2*n,0,TREE_SIZE - 1,1));
    return res;
  }

inline int GetP1Move(int per)
  {
    int res;
    res = MIN(PopTree(1,per,0,TREE_SIZE - 1,0),PopTree(per,2*n,0,TREE_SIZE - 1,0));
    return res;
  }

void Solve()
  {
    int i,j,x,y;
    
    T[0][0] = 0;
    // Fill first row
    for (i = 1;i <= n;i++)
      {
        x = GetP2Move(p[1][i]);
        
        T[0][i] = T[0][i - 1] + x;
        
        PushTree(p[1][i],0,TREE_SIZE - 1,1);
      }

    // Run solution
    for (i = 1;i <= n;i++)
      {
        // Fill the trees
        memset(tree[0],0,sizeof(tree[0]));
        memset(tree[1],0,sizeof(tree[1]));
        for (j = 1;j < i;j++)
          {
            PushTree(p[0][j],0,TREE_SIZE - 1,0);
            PushTree(p[0][j],0,TREE_SIZE - 1,1);
          }
        PushTree(p[0][i],0,TREE_SIZE - 1,1);

        T[i][0] = GetP1Move(p[0][i]);
        
        // Run the other dimentsion
        for(j = 1;j <= n;j++)
          {
            PushTree(p[1][j],0,TREE_SIZE - 1,0);
            
            y = GetP1Move(p[0][i]);
            x = GetP2Move(p[1][j]);

            T[i][j] = MIN(T[i - 1][j] + y,T[i][j - 1] + x);
            
            PushTree(p[1][j],0,TREE_SIZE - 1,1);
          }
      }
  }

void Output()
  {
    printf("%d\n",T[n][n]);
  }

int main()
  {
    Init();
    Solve();
    Output();
    return 0;
  }
