/*
TASK:round
LANG:C
*/


#include <stdio.h>

#define N 2048

typedef struct
{
  short b,e;
  short n;
}Leaf;

int n,s,m;
int list[2][N];
Leaf tree[8*N];
Leaf btree[8*N];
int tbl[N][N];

void buildT(int d)
{
  if(tree[d].e<tree[d].b)printf("error");
  if(d>m)m=d;
  if(tree[d].e-tree[d].b>0)
  {
    tree[2*d+1].b=tree[d].b;
    tree[2*d+1].e=tree[d].b+(tree[d].e-tree[d].b)/2;
    tree[2*d+2].b=tree[2*d+1].e+1;
    tree[2*d+2].e=tree[d].e;
    buildT(2*d+1);
    buildT(2*d+2);
  }
}

void initT()
{
  tree[0].b=1;
  tree[0].e=2*n;
  buildT(0);
}

void add(int x)
{
  int i=0;
  while(tree[i].b!=tree[i].e)
  {
    tree[i].n++;
    if(tree[2*i+1].e>=x)i=2*i+1;
    else i=2*i+2;
  }
  tree[i].n++;
}

void remov(int x)
{
  int i=0;
  while(tree[i].b!=tree[i].e)
  {
    tree[i].n--;
    if(tree[2*i+1].e>=x)i=2*i+1;
    else i=2*i+2;
  }
  tree[i].n--;
}

int searchT1(int x, int s)
{
  int c=0,i=0;
  while(tree[i].b!=tree[i].e)
  {
    if(tree[2*i+1].e>=x)i=2*i+1;
    else
    {
      c+=tree[2*i+1].n;
      i=2*i+2;
    }
  }
  if(c>s-c)c=s-c;
  return c;
}

int searchT2(int x, int s)
{
  int c,i;
  if(x>tree[1].e)
  {
    c=0;
    i=2;
  }
  else
  {
    c=tree[2].n;
    i=1;
  }
  while(tree[i].b!=tree[i].e)
  {
    if(tree[2*i+1].e>=x)i=2*i+1;
    else
    {
      c+=tree[2*i+1].n;
      i=2*i+2;
    }
  }
  if(c>s-c)c=s-c;
  return c;
}

void readf()
{
  int i;
  scanf("%d",&n);
  for(i=0; i<n; i++)scanf("%d",&list[0][i]);
  for(i=0; i<n; i++)scanf("%d",&list[1][i]);
}

void clearT()
{
  int i;
  for(i=0; i<m; i++)tree[i].n=0;
}

void fillT(int l2)
{
  int i;
  for(i=0; i<l2; i++)add(list[1][i]);
}

void initTbl()
{
  int i,j;
  for(i=0; i<=n; i++)
    for(j=0; j<=n; j++)tbl[i][j]=16*N;
}

void backup()
{
  int i;
  for(i=0; i<m; i++)btree[i]=tree[i];
}

void load(int k)
{
  int i;
  for(i=0; i<m; i++)tree[i]=btree[i];
  if(k)add(list[1][k-1]);
}

void solveTbl()
{
  int i,j,k;
  tbl[0][0]=0;
  for(i=0; i<=n; i++)
  {
    //clearT();
    //fillT(i);
    if(i)load(i);
    backup();
    for(j=0; j<=n; j++)
    {
      if(i<n)
      {
        k=searchT2(list[1][i],i+j)+tbl[i][j];
        //printf("%d k\n",k);
        if(k<tbl[i+1][j])tbl[i+1][j]=k;
      }
      if(j<n)
      {
        k=searchT1(list[0][j],i+j)+tbl[i][j];
        //printf("%d k\n",k);
        if(k<tbl[i][j+1])tbl[i][j+1]=k;
        add(list[0][j]);
      }
    }
  }
}

void printTbl()
{
  int i,j;
  for(i=0; i<=n; i++)
  {
    for(j=0; j<=n; j++)printf("%d ",tbl[i][j]);
    printf("\n");
  }
}

int main()
{
  readf();
  initT();
  initTbl();
  solveTbl();
  //printTbl();
  printf("%d\n",tbl[n][n]);
  return 0;
}
